in lang/php/lib/Schema/AvroSchema.php [297:389]
public static function realParse($avro, $default_namespace = null, &$schemata = null)
{
if (is_null($schemata)) {
$schemata = new AvroNamedSchemata();
}
if (is_array($avro)) {
$type = $avro[self::TYPE_ATTR] ?? null;
if (self::isPrimitiveType($type)) {
return new AvroPrimitiveSchema($type);
}
if (self::isNamedType($type)) {
$name = $avro[self::NAME_ATTR] ?? null;
$namespace = $avro[self::NAMESPACE_ATTR] ?? null;
$new_name = new AvroName($name, $namespace, $default_namespace);
$doc = $avro[self::DOC_ATTR] ?? null;
$aliases = $avro[self::ALIASES_ATTR] ?? null;
switch ($type) {
case self::FIXED_SCHEMA:
$size = $avro[self::SIZE_ATTR] ?? null;
return new AvroFixedSchema(
$new_name,
$doc,
$size,
$schemata,
$aliases
);
case self::ENUM_SCHEMA:
$symbols = $avro[self::SYMBOLS_ATTR] ?? null;
return new AvroEnumSchema(
$new_name,
$doc,
$symbols,
$schemata,
$aliases
);
case self::RECORD_SCHEMA:
case self::ERROR_SCHEMA:
$fields = $avro[self::FIELDS_ATTR] ?? null;
return new AvroRecordSchema(
$new_name,
$doc,
$fields,
$schemata,
$type,
$aliases
);
default:
throw new AvroSchemaParseException(sprintf('Unknown named type: %s', $type));
}
} elseif (self::isValidType($type)) {
switch ($type) {
case self::ARRAY_SCHEMA:
return new AvroArraySchema(
$avro[self::ITEMS_ATTR],
$default_namespace,
$schemata
);
case self::MAP_SCHEMA:
return new AvroMapSchema(
$avro[self::VALUES_ATTR],
$default_namespace,
$schemata
);
default:
throw new AvroSchemaParseException(
sprintf('Unknown valid type: %s', $type)
);
}
} elseif (
!array_key_exists(self::TYPE_ATTR, $avro)
&& AvroUtil::isList($avro)
) {
return new AvroUnionSchema($avro, $default_namespace, $schemata);
} else {
throw new AvroSchemaParseException(sprintf(
'Undefined type: %s',
$type
));
}
} elseif (self::isPrimitiveType($avro)) {
return new AvroPrimitiveSchema($avro);
} else {
throw new AvroSchemaParseException(
sprintf(
'%s is not a schema we know about.',
print_r($avro, true)
)
);
}
}