/** * @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())); } }