Skip to content
File

Blob: spec/proto/kv.proto

protobuf92 lines
1syntax = "proto3";
2package protocol;
3 
4option optimize_for = SPEED;
5option go_package = "go.miragespace.co/specter/spec/protocol";
6 
7import "google/protobuf/duration.proto";
8 
9service KVService {
10 rpc Put(SimpleRequest) returns (SimpleResponse);
11 rpc Get(SimpleRequest) returns (SimpleResponse);
12 rpc Delete(SimpleRequest) returns (SimpleResponse);
13 
14 rpc Append(PrefixRequest) returns (PrefixResponse);
15 rpc List(PrefixRequest) returns (PrefixResponse);
16 rpc Contains(PrefixRequest) returns (PrefixResponse);
17 rpc Remove(PrefixRequest) returns (PrefixResponse);
18 
19 rpc Acquire(LeaseRequest) returns (LeaseResponse);
20 rpc Renew(LeaseRequest) returns (LeaseResponse);
21 rpc Release(LeaseRequest) returns (LeaseResponse);
22 
23 rpc Import(ImportRequest) returns (ImportResponse);
24 
25 rpc ListKeys(ListKeysRequest) returns (ListKeysResponse);
26}
27 
28message SimpleRequest {
29 bytes key = 1;
30 bytes value = 2;
31}
32 
33message SimpleResponse {
34 bytes value = 1;
35}
36 
37message PrefixRequest {
38 bytes prefix = 1;
39 bytes child = 2;
40}
41 
42message PrefixResponse {
43 repeated bytes children = 1;
44 bool exists = 2;
45}
46 
47message LeaseRequest {
48 bytes lease = 1;
49 uint64 new_token = 2;
50 uint64 prev_token = 3;
51 
52 google.protobuf.Duration ttl = 5;
53}
54 
55message LeaseResponse {
56 uint64 token = 1;
57}
58 
59message KVTransfer {
60 // Presence distinguishes an empty simple value from no simple value, even
61 // when a prefix or lease shares the key. Keep tag 1 for legacy readers.
62 optional bytes simple_value = 1;
63 repeated bytes prefix_children = 2;
64 uint64 lease_token = 3;
65}
66 
67message ImportRequest {
68 repeated bytes keys = 1;
69 repeated KVTransfer values = 2;
70}
71 
72message ImportResponse {}
73 
74message ListKeysRequest {
75 bytes prefix = 1;
76}
77 
78message KeyComposite {
79 enum Type {
80 UNKNOWN = 0;
81 SIMPLE = 1;
82 PREFIX = 2;
83 LEASE = 3;
84 }
85 bytes key = 1;
86 Type type = 2;
87}
88 
89message ListKeysResponse {
90 repeated KeyComposite keys = 1;
91}