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

namespace Gtfs\FareAttribute;

use UnexpectedValueException;

/**
 * Protobuf type <code>gtfs.FareAttribute.Transfers</code>
 */
class Transfers
{
    /**
     * Generated from protobuf enum <code>NO = 0;</code>
     */
    const NO = 0;
    /**
     * Generated from protobuf enum <code>ONCE = 1;</code>
     */
    const ONCE = 1;
    /**
     * Generated from protobuf enum <code>TWICE = 2;</code>
     */
    const TWICE = 2;
    /**
     * Generated from protobuf enum <code>UNLIMITED = 3;</code>
     */
    const UNLIMITED = 3;

    private static $valueToName = [
        self::NO => 'NO',
        self::ONCE => 'ONCE',
        self::TWICE => 'TWICE',
        self::UNLIMITED => 'UNLIMITED',
    ];

    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(Transfers::class, \Gtfs\FareAttribute_Transfers::class);

