Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Annotations\Annotation; Chris@0: Chris@0: /** Chris@0: * Annotation that can be used to signal to the parser Chris@0: * to check the available values during the parsing process. Chris@0: * Chris@0: * @since 2.4 Chris@0: * @author Fabio B. Silva Chris@0: * Chris@0: * @Annotation Chris@0: * @Attributes({ Chris@0: * @Attribute("value", required = true, type = "array"), Chris@0: * @Attribute("literal", required = false, type = "array") Chris@0: * }) Chris@0: */ Chris@0: final class Enum Chris@0: { Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: public $value; Chris@0: Chris@0: /** Chris@0: * Literal target declaration. Chris@0: * Chris@0: * @var array Chris@0: */ Chris@0: public $literal; Chris@0: Chris@0: /** Chris@0: * Annotation constructor. Chris@0: * Chris@0: * @param array $values Chris@0: * Chris@0: * @throws \InvalidArgumentException Chris@0: */ Chris@0: public function __construct(array $values) Chris@0: { Chris@0: if ( ! isset($values['literal'])) { Chris@0: $values['literal'] = array(); Chris@0: } Chris@0: Chris@0: foreach ($values['value'] as $var) { Chris@0: if( ! is_scalar($var)) { Chris@0: throw new \InvalidArgumentException(sprintf( Chris@0: '@Enum supports only scalar values "%s" given.', Chris@0: is_object($var) ? get_class($var) : gettype($var) Chris@0: )); Chris@0: } Chris@0: } Chris@0: Chris@0: foreach ($values['literal'] as $key => $var) { Chris@0: if( ! in_array($key, $values['value'])) { Chris@0: throw new \InvalidArgumentException(sprintf( Chris@0: 'Undefined enumerator value "%s" for literal "%s".', Chris@0: $key , $var Chris@0: )); Chris@0: } Chris@0: } Chris@0: Chris@0: $this->value = $values['value']; Chris@0: $this->literal = $values['literal']; Chris@0: } Chris@0: }