// Copyright 2018 The Feed Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto2";


package search.now.wire.feed;

option optimize_for=LITE_RUNTIME;

option java_package = "com.google.search.now.wire.feed";
option java_outer_classname = "VersionProto";

// Specification of an application or OS version.
// A version string typically looks like: 'major.minor.build.revision'
message Version {
  optional int32 major = 1;
  optional int32 minor = 2;
  optional int32 build = 3;
  optional int32 revision = 4;

  // The CPU architecture that the native libraries support
  enum Architecture {
    UNKNOWN_ACHITECTURE = 0;
    ARM = 1;
    ARM64 = 2;
    MIPS = 3;
    MIPS64 = 4;
    X86 = 5;
    X86_64 = 6;
  }
  optional Architecture architecture = 5;

  // The release stage of the build
  enum BuildType {
    UNKNOWN_BUILD_TYPE = 0;
    DEV = 1;
    ALPHA = 2;
    BETA = 3;
    RELEASE = 4;
  }
  optional BuildType build_type = 6;

  // Specific to Android OS versions. Specifies the API version that the OS
  // supports.
  optional int32 api_version = 7;
}
