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

namespace Gtfs\FareAttribute;

use UnexpectedValueException;

/**
 * Protobuf type <code>gtfs.FareAttribute.PaymentMethod</code>
 */
class PaymentMethod
{
    /**
     * Generated from protobuf enum <code>ONBOARD = 0;</code>
     */
    const ONBOARD = 0;
    /**
     * Generated from protobuf enum <code>PREBOARDING = 1;</code>
     */
    const PREBOARDING = 1;

    private static $valueToName = [
        self::ONBOARD => 'ONBOARD',
        self::PREBOARDING => 'PREBOARDING',
    ];

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

