EnumDescriptor.php 2.29 KB
Newer Older
1 2 3 4
<?php

namespace Google\Protobuf\Internal;

5 6
use Google\Protobuf\EnumValueDescriptor;

7 8
class EnumDescriptor
{
9
    use HasPublicDescriptorTrait;
10 11

    private $klass;
12
    private $legacy_klass;
13 14
    private $full_name;
    private $value;
15
    private $name_to_value;
16 17 18 19 20 21
    private $value_descriptor = [];

    public function __construct()
    {
        $this->public_desc = new \Google\Protobuf\EnumDescriptor($this);
    }
22 23 24 25 26 27 28 29 30 31 32 33 34 35

    public function setFullName($full_name)
    {
        $this->full_name = $full_name;
    }

    public function getFullName()
    {
        return $this->full_name;
    }

    public function addValue($number, $value)
    {
        $this->value[$number] = $value;
36
        $this->name_to_value[$value->getName()] = $value;
37
        $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number);
38 39 40 41 42 43 44 45 46 47
    }

    public function getValueByNumber($number)
    {
        return $this->value[$number];
    }

    public function getValueByName($name)
    {
        return $this->name_to_value[$name];
48 49
    }

50 51 52 53 54 55 56 57 58 59
    public function getValueDescriptorByIndex($index)
    {
        return $this->value_descriptor[$index];
    }

    public function getValueCount()
    {
        return count($this->value);
    }

60 61 62 63 64 65 66 67 68 69
    public function setClass($klass)
    {
        $this->klass = $klass;
    }

    public function getClass()
    {
        return $this->klass;
    }

70 71 72 73 74 75 76 77 78 79
    public function setLegacyClass($klass)
    {
        $this->legacy_klass = $klass;
    }

    public function getLegacyClass()
    {
        return $this->legacy_klass;
    }

80 81 82 83 84 85
    public static function buildFromProto($proto, $file_proto, $containing)
    {
        $desc = new EnumDescriptor();

        $enum_name_without_package  = "";
        $classname = "";
86
        $legacy_classname = "";
87 88 89 90 91 92 93
        $fullname = "";
        GPBUtil::getFullClassName(
            $proto,
            $containing,
            $file_proto,
            $enum_name_without_package,
            $classname,
94
            $legacy_classname,
95 96 97
            $fullname);
        $desc->setFullName($fullname);
        $desc->setClass($classname);
98
        $desc->setLegacyClass($legacy_classname);
99 100 101 102
        $values = $proto->getValue();
        foreach ($values as $value) {
            $desc->addValue($value->getNumber(), $value);
        }
103 104 105 106

        return $desc;
    }
}