lang/php/lib/Schema/AvroEnumSchema.php (57 lines of code) (raw):

<?php /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Apache\Avro\Schema; use Apache\Avro\AvroException; use Apache\Avro\AvroUtil; /** * @package Avro */ class AvroEnumSchema extends AvroNamedSchema { /** * @var string[] array of symbols */ private $symbols; /** * @param AvroName $name * @param string $doc * @param string[] $symbols * @param AvroNamedSchemata &$schemata * @throws AvroSchemaParseException */ public function __construct($name, $doc, $symbols, &$schemata = null, $aliases = null) { if (!AvroUtil::isList($symbols)) { throw new AvroSchemaParseException('Enum Schema symbols are not a list'); } if (count(array_unique($symbols)) > count($symbols)) { throw new AvroSchemaParseException( sprintf('Duplicate symbols: %s', $symbols) ); } foreach ($symbols as $symbol) { if (!is_string($symbol) || empty($symbol)) { throw new AvroSchemaParseException( sprintf('Enum schema symbol must be a string %s', print_r($symbol, true)) ); } } parent::__construct(AvroSchema::ENUM_SCHEMA, $name, $doc, $schemata, $aliases); $this->symbols = $symbols; } /** * @returns string[] this enum schema's symbols */ public function symbols() { return $this->symbols; } /** * @param string $symbol * @returns boolean true if the given symbol exists in this * enum schema and false otherwise */ public function hasSymbol($symbol) { return in_array($symbol, $this->symbols); } /** * @param int $index * @returns string enum schema symbol with the given (zero-based) index */ public function symbolByIndex($index) { if (array_key_exists($index, $this->symbols)) { return $this->symbols[$index]; } throw new AvroException(sprintf('Invalid symbol index %d', $index)); } /** * @param string $symbol * @returns int the index of the given $symbol in the enum schema */ public function symbolIndex($symbol) { $idx = array_search($symbol, $this->symbols, true); if (false !== $idx) { return $idx; } throw new AvroException(sprintf("Invalid symbol value '%s'", $symbol)); } /** * @returns mixed */ public function toAvro() { $avro = parent::toAvro(); $avro[AvroSchema::SYMBOLS_ATTR] = $this->symbols; return $avro; } }