syntax = "proto2";

package package;

message Package {
  // All releases of the package
  repeated Release releases = 1;
  // Name of package
  required string name = 2;
  // Name of repository
  required string repository = 3;
}

message Release {
  // Release version
  required string version = 1;
  // sha256 checksum of "inner" package tarball
  // deprecated in favor of outer_checksum
  required bytes inner_checksum = 2;
  // All dependencies of the release
  repeated Dependency dependencies = 3;
  // If set the release is retired, a retired release should only be
  // resolved if it has already been locked in a project
  optional RetirementStatus retired = 4;
  // sha256 checksum of outer package tarball
  // required when encoding but optional when decoding
  optional bytes outer_checksum = 5;
}

message RetirementStatus {
  required RetirementReason reason = 1;
  optional string message = 2;
}

enum RetirementReason {
  RETIRED_OTHER = 0;
  RETIRED_INVALID = 1;
  RETIRED_SECURITY = 2;
  RETIRED_DEPRECATED = 3;
  RETIRED_RENAMED = 4;
}

message Dependency {
  // Package name of dependency
  required string package = 1;
  // Version requirement of dependency
  required string requirement = 2;
  // If set and true the package is optional (see dependency resolution)
  optional bool optional = 3;
  // If set is the OTP application name of the dependency, if not set the
  // application name is the same as the package name
  optional string app = 4;
  // If set, the repository where the dependency is located
  optional string repository = 5;
}
