syntax = "proto3";
package elpe;


message AddPathRequest {
  message File {
    string name = 1;
    int64 length = 2;
    int32 permissions = 3;
  }
  message FileContents {
    int64 start = 1;
    bytes content = 2;
  }
  message Directory {
    string name = 1;
    int32 permissions = 3;
  }

  oneof request {
    File file = 1;
    Directory directory = 2;
    FileContents contents = 3;
  }
}

message DerivationRequest {
  string name = 1;
  string builder = 2;
  repeated string paths = 3;
  string target = 4;
  optional string output_hash = 5;
}

message PathPattern {
  string pattern = 1;
  repeated string matches = 2;
}

message DerivationResult {
  repeated string destdir = 1;
  repeated string paths = 2;
  repeated PathPattern path_patterns = 3;
}

message DerivationReply {
  oneof result {
    DerivationResult ok = 1;
    string error = 2;
  }
}

enum Arch {
  amd64 = 0;
  aarch64 = 1;
}

message UbuntuReleaseRequest {
  string release = 1;
  Arch arch = 2;
  string repository = 3;
}

message UbuntuPackageRequest {
  repeated string index = 1;
  string name = 2;
  repeated string path_patterns = 3;
}

service Elpe {
  rpc Derivation (DerivationRequest) returns (DerivationReply);
  rpc AddPath (stream AddPathRequest) returns (DerivationReply);
  rpc UbuntuRelease (UbuntuReleaseRequest) returns (DerivationReply);
  rpc UbuntuPackage (UbuntuPackageRequest) returns (DerivationReply);
}