| <?php |
| |
| namespace Google\Protobuf\Internal; |
| |
| class EnumDescriptor |
| { |
| use HasPublicDescriptorTrait; |
| |
| private $klass; |
| private $legacy_klass; |
| private $full_name; |
| private $value; |
| private $name_to_value; |
| private $custom_name_to_value = []; |
| private $value_descriptor = []; |
| |
| public function __construct() |
| { |
| $this->public_desc = new \Google\Protobuf\EnumDescriptor($this); |
| } |
| |
| public function setFullName($full_name) |
| { |
| $this->full_name = $full_name; |
| } |
| |
| public function getFullName() |
| { |
| return $this->full_name; |
| } |
| |
| /** |
| * @param EnumValueDescriptor $value |
| */ |
| public function addValue(EnumValueDescriptor $value) |
| { |
| $this->value[$value->getNumber()] = $value; |
| $this->name_to_value[$value->getName()] = $value; |
| $this->value_descriptor[] = $value; |
| |
| $custom_name = $value->getCustomJsonName(); |
| if ($custom_name !== null) { |
| $this->custom_name_to_value[$custom_name] = $value; |
| } |
| } |
| |
| public function getValueByNumber($number) |
| { |
| if (isset($this->value[$number])) { |
| return $this->value[$number]; |
| } |
| return null; |
| } |
| |
| public function getValueByName($name) |
| { |
| if (isset($this->name_to_value[$name])) { |
| return $this->name_to_value[$name]; |
| } |
| return null; |
| } |
| |
| /** |
| * Looks up an enum value descriptor by its JSON name. |
| * |
| * @param string $name |
| * @return EnumValueDescriptor|null |
| */ |
| public function getValueByJsonName($name) |
| { |
| if (isset($this->custom_name_to_value[$name])) { |
| return $this->custom_name_to_value[$name]; |
| } |
| return $this->getValueByName($name); |
| } |
| |
| public function getValueDescriptorByIndex($index) |
| { |
| if (isset($this->value_descriptor[$index])) { |
| return $this->value_descriptor[$index]; |
| } |
| return null; |
| } |
| |
| public function getValueCount() |
| { |
| return count($this->value); |
| } |
| |
| public function setClass($klass) |
| { |
| $this->klass = $klass; |
| } |
| |
| public function getClass() |
| { |
| return $this->klass; |
| } |
| |
| public function setLegacyClass($klass) |
| { |
| $this->legacy_klass = $klass; |
| } |
| |
| public function getLegacyClass() |
| { |
| return $this->legacy_klass; |
| } |
| |
| public static function buildFromProto($proto, $file_proto, $containing, $custom_json_names = []) |
| { |
| $desc = new EnumDescriptor(); |
| |
| $enum_name_without_package = ""; |
| $classname = ""; |
| $legacy_classname = ""; |
| $fullname = ""; |
| GPBUtil::getFullClassName( |
| $proto, |
| $containing, |
| $file_proto, |
| $enum_name_without_package, |
| $classname, |
| $legacy_classname, |
| $fullname, |
| $unused_previous_classname); |
| $desc->setFullName($fullname); |
| $desc->setClass($classname); |
| $desc->setLegacyClass($legacy_classname); |
| $values = $proto->getValue(); |
| foreach ($values as $value) { |
| $val_fqn = $fullname . '.' . $value->getName(); |
| $custom_json_name = $custom_json_names[$val_fqn] ?? null; |
| $desc->addValue(new EnumValueDescriptor( |
| $value->getName(), $value->getNumber(), $custom_json_name)); |
| } |
| |
| return $desc; |
| } |
| } |