blob: 556c909a1ee918c4a0f2edc96ba200fda9e4277e [file]
<?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;
}
}