proto/inventory.proto
// Склад: внешняя система shop (V.5). Фейковый сервер: tests/shop/fakes. reserve/release идемпотентны (ключ — ctx.idempotencyKey).
syntax = "proto3";
package warehouse;
import "oxl/options.proto";
import "google/protobuf/empty.proto";
message Line { string sku = 1; uint32 qty = 2; }
message ReserveReq { repeated Line items = 1; }
message ReserveResp { string reservationId = 1; string warehouse = 2; }
message ReleaseReq { string reservationId = 1; }
message OutOfStock { option (oxl.error) = true; string sku = 1; }
service Inventory {
rpc reserve(ReserveReq) returns (ReserveResp) {
option idempotency_level = IDEMPOTENT;
option (oxl.raises) = "warehouse.OutOfStock";
}
rpc release(ReleaseReq) returns (google.protobuf.Empty) { option idempotency_level = IDEMPOTENT; }
}Исходник: examples/shop/proto/inventory.proto