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

namespace Gtfs;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

/**
 * Generated from protobuf message <code>gtfs.StopTime</code>
 */
class StopTime extends \Google\Protobuf\Internal\Message
{
    /**
     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
     *
     * Generated from protobuf field <code>string trip_id = 1;</code>
     */
    protected $trip_id = '';
    /**
     * Generated from protobuf field <code>string arrival_time = 2;</code>
     */
    protected $arrival_time = '';
    /**
     * Generated from protobuf field <code>string departure_time = 3;</code>
     */
    protected $departure_time = '';
    /**
     * Generated from protobuf field <code>string stop_id = 4;</code>
     */
    protected $stop_id = '';
    /**
     * Generated from protobuf field <code>string stop_sequence = 5;</code>
     */
    protected $stop_sequence = '';
    /**
     * Generated from protobuf field <code>string stop_headsign = 6;</code>
     */
    protected $stop_headsign = '';
    /**
     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
     */
    protected $pickup_type = 0;
    /**
     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
     */
    protected $drop_off_type = 0;
    /**
     * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
     */
    protected $shape_dist_traveled = 0.0;
    /**
     * The extensions namespace allows 3rd-party developers to extend the
     * GTFS specification in order to add and evaluate new features and
     * modifications to the spec.
     *
     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
     */
    protected $extension = null;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $trip_id
     *           The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
     *     @type string $arrival_time
     *     @type string $departure_time
     *     @type string $stop_id
     *     @type string $stop_sequence
     *     @type string $stop_headsign
     *     @type int $pickup_type
     *     @type int $drop_off_type
     *     @type float $shape_dist_traveled
     *     @type \Google\Protobuf\Any $extension
     *           The extensions namespace allows 3rd-party developers to extend the
     *           GTFS specification in order to add and evaluate new features and
     *           modifications to the spec.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Proto\Gtfs::initOnce();
        parent::__construct($data);
    }

    /**
     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
     *
     * Generated from protobuf field <code>string trip_id = 1;</code>
     * @return string
     */
    public function getTripId()
    {
        return $this->trip_id;
    }

    /**
     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
     *
     * Generated from protobuf field <code>string trip_id = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setTripId($var)
    {
        GPBUtil::checkString($var, True);
        $this->trip_id = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>string arrival_time = 2;</code>
     * @return string
     */
    public function getArrivalTime()
    {
        return $this->arrival_time;
    }

    /**
     * Generated from protobuf field <code>string arrival_time = 2;</code>
     * @param string $var
     * @return $this
     */
    public function setArrivalTime($var)
    {
        GPBUtil::checkString($var, True);
        $this->arrival_time = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>string departure_time = 3;</code>
     * @return string
     */
    public function getDepartureTime()
    {
        return $this->departure_time;
    }

    /**
     * Generated from protobuf field <code>string departure_time = 3;</code>
     * @param string $var
     * @return $this
     */
    public function setDepartureTime($var)
    {
        GPBUtil::checkString($var, True);
        $this->departure_time = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>string stop_id = 4;</code>
     * @return string
     */
    public function getStopId()
    {
        return $this->stop_id;
    }

    /**
     * Generated from protobuf field <code>string stop_id = 4;</code>
     * @param string $var
     * @return $this
     */
    public function setStopId($var)
    {
        GPBUtil::checkString($var, True);
        $this->stop_id = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>string stop_sequence = 5;</code>
     * @return string
     */
    public function getStopSequence()
    {
        return $this->stop_sequence;
    }

    /**
     * Generated from protobuf field <code>string stop_sequence = 5;</code>
     * @param string $var
     * @return $this
     */
    public function setStopSequence($var)
    {
        GPBUtil::checkString($var, True);
        $this->stop_sequence = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>string stop_headsign = 6;</code>
     * @return string
     */
    public function getStopHeadsign()
    {
        return $this->stop_headsign;
    }

    /**
     * Generated from protobuf field <code>string stop_headsign = 6;</code>
     * @param string $var
     * @return $this
     */
    public function setStopHeadsign($var)
    {
        GPBUtil::checkString($var, True);
        $this->stop_headsign = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
     * @return int
     */
    public function getPickupType()
    {
        return $this->pickup_type;
    }

    /**
     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
     * @param int $var
     * @return $this
     */
    public function setPickupType($var)
    {
        GPBUtil::checkEnum($var, \Gtfs\StopTime_AvailabilityType::class);
        $this->pickup_type = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
     * @return int
     */
    public function getDropOffType()
    {
        return $this->drop_off_type;
    }

    /**
     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
     * @param int $var
     * @return $this
     */
    public function setDropOffType($var)
    {
        GPBUtil::checkEnum($var, \Gtfs\StopTime_AvailabilityType::class);
        $this->drop_off_type = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
     * @return float
     */
    public function getShapeDistTraveled()
    {
        return $this->shape_dist_traveled;
    }

    /**
     * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
     * @param float $var
     * @return $this
     */
    public function setShapeDistTraveled($var)
    {
        GPBUtil::checkFloat($var);
        $this->shape_dist_traveled = $var;

        return $this;
    }

    /**
     * The extensions namespace allows 3rd-party developers to extend the
     * GTFS specification in order to add and evaluate new features and
     * modifications to the spec.
     *
     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
     * @return \Google\Protobuf\Any
     */
    public function getExtension()
    {
        return $this->extension;
    }

    /**
     * The extensions namespace allows 3rd-party developers to extend the
     * GTFS specification in order to add and evaluate new features and
     * modifications to the spec.
     *
     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
     * @param \Google\Protobuf\Any $var
     * @return $this
     */
    public function setExtension($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
        $this->extension = $var;

        return $this;
    }

}

