<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/protobuf/type.proto

namespace Google\Protobuf\Field;

use UnexpectedValueException;

/**
 * Whether a field is optional, required, or repeated.
 *
 * Protobuf type <code>google.protobuf.Field.Cardinality</code>
 */
class Cardinality
{
    /**
     * For fields with unknown cardinality.
     *
     * Generated from protobuf enum <code>CARDINALITY_UNKNOWN = 0;</code>
     */
    const CARDINALITY_UNKNOWN = 0;
    /**
     * For optional fields.
     *
     * Generated from protobuf enum <code>CARDINALITY_OPTIONAL = 1;</code>
     */
    const CARDINALITY_OPTIONAL = 1;
    /**
     * For required fields. Proto2 syntax only.
     *
     * Generated from protobuf enum <code>CARDINALITY_REQUIRED = 2;</code>
     */
    const CARDINALITY_REQUIRED = 2;
    /**
     * For repeated fields.
     *
     * Generated from protobuf enum <code>CARDINALITY_REPEATED = 3;</code>
     */
    const CARDINALITY_REPEATED = 3;

    private static $valueToName = [
        self::CARDINALITY_UNKNOWN => 'CARDINALITY_UNKNOWN',
        self::CARDINALITY_OPTIONAL => 'CARDINALITY_OPTIONAL',
        self::CARDINALITY_REQUIRED => 'CARDINALITY_REQUIRED',
        self::CARDINALITY_REPEATED => 'CARDINALITY_REPEATED',
    ];

    public static function name($value)
    {
        if (!isset(self::$valueToName[$value])) {
            throw new UnexpectedValueException(sprintf(
                    'Enum %s has no name defined for value %s', __CLASS__, $value));
        }
        return self::$valueToName[$value];
    }

    public static function value($name)
    {
        $const = __CLASS__ . '::' . strtoupper($name);
        if (!defined($const)) {
            throw new UnexpectedValueException(sprintf(
                    'Enum %s has no value defined for name %s', __CLASS__, $name));
        }
        return constant($const);
    }
}

// Adding a class alias for backwards compatibility with the previous class name.
class_alias(Cardinality::class, \Google\Protobuf\Field_Cardinality::class);

