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

namespace Gtfs\Trip;

use UnexpectedValueException;

/**
 * The direction_id field contains a binary value that indicates the direction of travel for a trip.
 *
 * Protobuf type <code>gtfs.Trip.Direction</code>
 */
class Direction
{
    /**
     * Generated from protobuf enum <code>OUTBOUND = 0;</code>
     */
    const OUTBOUND = 0;
    /**
     * Generated from protobuf enum <code>INBOUND = 1;</code>
     */
    const INBOUND = 1;

    private static $valueToName = [
        self::OUTBOUND => 'OUTBOUND',
        self::INBOUND => 'INBOUND',
    ];

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

