elpegrpc.proto
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;
}
}
enum Hash {
blake3 = 0;
sha256 = 1;
}
message AddUrlRequest {
string url = 1;
Hash hash_algorithm = 2;
bytes hash = 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;
bytes stdout = 3;
bytes stderr = 4;
string loading = 5;
}
}
enum Arch {
amd64 = 0;
aarch64 = 1;
}
enum Endianness {
big = 0;
little = 1;
}
message UbuntuReleaseRequest {
string release = 1;
Arch arch = 2;
string repository = 3;
}
message LinkExtra {
string pkg = 1;
string dep = 2;
}
message UbuntuPackageRequest {
repeated string index = 1;
string name = 2;
repeated LinkExtra link_extra = 3;
}
message PlatformReply {
Arch arch = 1;
Endianness endianness = 2;
int32 pointer_width = 3;
}
message Empty {}
service Elpe {
rpc Handshake (Empty) returns (PlatformReply);
rpc Derivation (DerivationRequest) returns (stream DerivationReply);
rpc AddPath (stream AddPathRequest) returns (DerivationReply);
rpc AddUrl (AddUrlRequest) returns (DerivationReply);
rpc UbuntuRelease (UbuntuReleaseRequest) returns (DerivationReply);
rpc UbuntuPackage (UbuntuPackageRequest) returns (stream DerivationReply);
}