/** * @param $writers_schema * @param $datum * @param $encoder * @throws AvroException * @throws AvroIOTypeException * @throws AvroSchemaParseException */ private function write_union($writers_schema, $datum, $encoder) { $datum_schema_index = -1; $datum_schema = null; foreach ($writers_schema->schemas() as $index => $schema) { if (AvroSchema::is_valid_datum($schema, $datum)) { $datum_schema_index = $index; $datum_schema = $schema; break; } } if (is_null($datum_schema)) { throw new AvroIOTypeException($writers_schema, $datum); } $encoder->write_long($datum_schema_index); $this->write_data($datum_schema, $datum, $encoder); }