<?php
namespace Airavata\API;

/**
 * Autogenerated by Thrift Compiler (0.10.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
use Thrift\Base\TBase;
use Thrift\Type\TType;
use Thrift\Type\TMessageType;
use Thrift\Exception\TException;
use Thrift\Exception\TProtocolException;
use Thrift\Protocol\TProtocol;
use Thrift\Protocol\TBinaryProtocolAccelerated;
use Thrift\Exception\TApplicationException;


final class Constant extends \Thrift\Type\TConstant {
  static protected $AIRAVATA_API_VERSION;

  static protected function init_AIRAVATA_API_VERSION() {
    return     /**
     * Airavata Interface Versions depend upon this Thrift Interface File. When making changes, please edit the
     *  Version Constants according to Semantic Versioning Specification (SemVer) http://semver.org.
     * 
     * Note: The Airavata API version may be different from the Airavata software release versions.
     * 
     * The Airavata API version is composed as a dot delimited string with major, minor, and patch level components.
     * 
     *  - Major: Incremented for backward incompatible changes. An example would be changes to interfaces.
     *  - Minor: Incremented for backward compatible changes. An example would be the addition of a new optional methods.
     *  - Patch: Incremented for bug fixes. The patch level should be increased for every edit that doesn't result
     *              in a change to major/minor version numbers.
     * 
     */
"0.17.0";
  }
}


