2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2026-06-13 22:48:42 +00:00
Files
2026-06-08 18:01:02 +03:00

245 lines
5.9 KiB
Protocol Buffer

syntax = "proto3";
package gpmodel;
option csharp_namespace = "Esiur.Tests.RPC.Client.Grpc";
// ========================= Enums =========================
enum Currency {
CURRENCY_IQD = 0;
CURRENCY_CNH = 1;
CURRENCY_USD = 2;
CURRENCY_EUR = 3;
CURRENCY_JPY = 4;
CURRENCY_GBP = 5;
}
enum DocType {
DOC_TYPE_QUOTE = 0;
DOC_TYPE_ORDER = 1;
DOC_TYPE_INVOICE = 2;
DOC_TYPE_CREDIT_NOTE = 3;
}
enum PaymentMethod {
PAYMENT_METHOD_CASH = 0;
PAYMENT_METHOD_CARD = 1;
PAYMENT_METHOD_WIRE = 2;
PAYMENT_METHOD_CRYPTO = 3;
PAYMENT_METHOD_OTHER = 4;
}
enum LineType {
LINE_TYPE_PRODUCT = 0;
LINE_TYPE_SERVICE = 1;
LINE_TYPE_DISCOUNT = 2;
LINE_TYPE_SHIPPING = 3;
}
// Variant.Kind
enum Kind {
KIND_NULL = 0;
KIND_BOOL = 1;
KIND_INT64 = 2;
KIND_UINT64 = 3;
KIND_DOUBLE = 4;
KIND_DECIMAL = 5;
KIND_STRING = 6;
KIND_BYTES = 7;
KIND_DATETIME = 8;
KIND_GUID = 9;
}
// ========================= Variant =========================
//
// C# Variant:
// Tag: Kind
// Bool: bool?
// I64: long?
// U64: ulong?
// F64: double?
// Str: string?
// Bytes: byte[]?
// Dt: DateTime? -> int64 (ticks or epoch millis)
// Guid: byte[]?
message Variant {
Kind tag = 1;
bool bool_val = 2; // optional in C#
int64 i64_val = 3; // optional in C#
uint64 u64_val = 4; // optional in C#
double f64_val = 5; // optional in C#
string str_val = 6; // optional in C#
bytes bytes_val = 7; // optional in C#
int64 dt_val = 8; // optional in C# (DateTime)
bytes guid_val = 9; // optional in C# (Guid as 16-byte array)
}
// Optional helpers mirroring MetaEntry / ExtEntry (not required for RPC)
message MetaEntry {
string key = 1;
Variant value = 2;
}
message ExtEntry {
string key = 1;
Variant value = 2;
}
// ========================= Address & Party =========================
message Address {
string line1 = 1;
optional string line2 = 2; // optional in C#
string city = 3;
string region = 4;
string country = 5;
optional string postal_code = 6; // optional in C#
}
message Party {
uint64 id = 1;
string name = 2;
string tax_id = 3; // optional in C#
string email = 4; // optional in C#
string phone = 5; // optional in C#
Address address = 6; // optional in C#
string preferred_language = 7; // optional in C#
}
// ========================= DocumentHeader =========================
//
// DateTime/DateTime? -> int64 (ticks or epoch millis, your choice)
message DocumentHeader {
bytes doc_id = 1;
DocType type = 2;
int32 version = 3;
int64 created_at = 4; // DateTime
optional int64 updated_at = 5; // optional in C#
Currency currency = 6;
string notes = 7; // optional in C#
map<string, Variant> meta = 8;
}
// ========================= LineItem, Payment, Attachment =========================
message LineItem {
int32 line_no = 1;
LineType type = 2;
string sku = 3;
string description = 4;
double qty = 5;
string qty_unit = 6;
double unit_price = 7;
optional double vat_rate = 8; // optional in C#
optional double discount = 9; // optional in C#
map<string, Variant> ext = 10;
}
message Payment {
PaymentMethod method = 1;
double amount = 2;
string reference = 3; // optional in C#
int64 timestamp = 4; // DateTime
double fee = 5; // optional in C#
Currency currency = 6;
}
message Attachment {
string name = 1;
string mime_type = 2;
bytes data = 3;
}
// ========================= Top-level BusinessDocument =========================
message BusinessDocument {
DocumentHeader header = 1;
Party seller = 2;
Party buyer = 3;
repeated LineItem items = 4;
repeated Payment payments = 5;
repeated Attachment attachments = 6;
repeated int32 risk_scores = 7;
}
// ========================= Echo Service Messages =========================
//
// C# signatures:
//
// byte[] EchoBytes(byte[])
// BusinessDocument[] EchoDocuments(BusinessDocument[] docs)
// int[] EchoIntArray(int[] array)
// string[] EchoStringArray(string[] array)
// Map<string, BusinessDocument> EchoMap(Map<string, BusinessDocument> map)
// DocType EchoEnumArray(DocType[] docTypes);
// --- Bytes ---
message BytesRequest {
bytes data = 1;
}
// --- Bytes ---
message BytesResponse {
bytes data = 1;
}
// --- Documents ---
message DocumentsRequest {
repeated BusinessDocument docs = 1;
}
message DocumentsResponse {
repeated BusinessDocument docs = 1;
}
// --- Int array ---
message IntArrayRequest {
repeated int32 array = 1;
}
message IntArrayResponse {
repeated int32 array = 1;
}
// --- String array ---
message StringArrayRequest {
repeated string array = 1;
}
message StringArrayResponse {
repeated string array = 1;
}
// --- Map<string, BusinessDocument> ---
message DocMapRequest {
map<string, BusinessDocument> map = 1;
}
message DocMapResponse {
map<string, BusinessDocument> map = 1;
}
// --- Enum array (returns a single DocType, e.g. last element) ---
message EnumArrayRequest {
repeated DocType doc_types = 1;
}
message EnumResponse {
repeated DocType doc_types = 1;
}
// ========================= Echo Service =========================
service EchoService {
rpc EchoBytes (BytesRequest) returns (BytesResponse);
rpc EchoDocuments (DocumentsRequest) returns (DocumentsResponse);
rpc EchoIntArray (IntArrayRequest) returns (IntArrayResponse);
rpc EchoStringArray (StringArrayRequest) returns (StringArrayResponse);
rpc EchoMap (DocMapRequest) returns (DocMapResponse);
rpc EchoEnumArray (EnumArrayRequest) returns (EnumResponse);
}