예제 #1
0
파일: datum.php 프로젝트: wikimedia/avro
 /**
  * @param AvroSchema $field_schema
  * @param null|boolean|int|float|string|array $default_value
  * @return null|boolean|int|float|string|array
  *
  * @throws AvroException if $field_schema type is unknown.
  */
 public function read_default_value($field_schema, $default_value)
 {
     switch ($field_schema->type()) {
         case AvroSchema::NULL_TYPE:
             return null;
         case AvroSchema::BOOLEAN_TYPE:
             return $default_value;
         case AvroSchema::INT_TYPE:
         case AvroSchema::LONG_TYPE:
             return (int) $default_value;
         case AvroSchema::FLOAT_TYPE:
         case AvroSchema::DOUBLE_TYPE:
             return (double) $default_value;
         case AvroSchema::STRING_TYPE:
         case AvroSchema::BYTES_TYPE:
             return $default_value;
         case AvroSchema::ARRAY_SCHEMA:
             $array = array();
             foreach ($default_value as $json_val) {
                 $val = $this->read_default_value($field_schema->items(), $json_val);
                 $array[] = $val;
             }
             return $array;
         case AvroSchema::MAP_SCHEMA:
             $map = array();
             foreach ($default_value as $key => $json_val) {
                 $map[$key] = $this->read_default_value($field_schema->values(), $json_val);
             }
             return $map;
         case AvroSchema::UNION_SCHEMA:
             return $this->read_default_value($field_schema->schema_by_index(0), $default_value);
         case AvroSchema::ENUM_SCHEMA:
         case AvroSchema::FIXED_SCHEMA:
             return $default_value;
         case AvroSchema::RECORD_SCHEMA:
             $record = array();
             foreach ($field_schema->fields() as $field) {
                 $field_name = $field->name();
                 if (!($json_val = $default_value[$field_name])) {
                     $json_val = $field->default_value();
                 }
                 $record[$field_name] = $this->read_default_value($field->type(), $json_val);
             }
             return $record;
         default:
             throw new AvroException(sprintf('Unknown type: %s', $field_schema->type()));
     }
 }