From a506cd8f0861ae94e5e4abf83d8b62976172ce6e Mon Sep 17 00:00:00 2001 From: Priec Date: Sat, 20 Dec 2025 20:57:11 +0100 Subject: [PATCH] linted protobufs via buf --- Cargo.lock | 64 ++++++---------- common/proto/adresar.proto | 112 ++++++++++++++-------------- common/proto/auth.proto | 38 +++++----- common/proto/common.proto | 8 +- common/proto/search.proto | 18 ++--- common/proto/search2.proto | 44 +++++------ common/proto/table_definition.proto | 9 +-- common/proto/table_structure.proto | 3 +- common/proto/table_validation.proto | 10 +-- common/proto/uctovnictvo.proto | 82 ++++++++++---------- common/src/proto/descriptor.bin | Bin 52616 -> 52612 bytes flake.nix | 1 + server | 2 +- 13 files changed, 185 insertions(+), 206 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a46b7ec..c8895bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1959,11 +1959,11 @@ checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -2080,12 +2080,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.60.2", ] [[package]] @@ -2243,12 +2242,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "ownedbytes" version = "0.9.0" @@ -2810,17 +2803,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -2831,15 +2815,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.5" @@ -3210,6 +3188,7 @@ dependencies = [ "futures", "jsonwebtoken", "lazy_static", + "once_cell", "prost 0.13.5", "prost-build 0.14.1", "prost-types 0.13.5", @@ -3234,6 +3213,7 @@ dependencies = [ "tonic", "tonic-reflection", "tracing", + "tracing-subscriber", "uuid", "validator", ] @@ -3830,7 +3810,7 @@ dependencies = [ "fnv", "once_cell", "plist", - "regex-syntax 0.8.5", + "regex-syntax", "serde", "serde_derive", "serde_json", @@ -3936,7 +3916,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" dependencies = [ "byteorder", - "regex-syntax 0.8.5", + "regex-syntax", "utf8-ranges", ] @@ -4318,9 +4298,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -4330,9 +4310,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -4341,9 +4321,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -4362,14 +4342,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", diff --git a/common/proto/adresar.proto b/common/proto/adresar.proto index 41e0ea2..00094be 100644 --- a/common/proto/adresar.proto +++ b/common/proto/adresar.proto @@ -6,78 +6,78 @@ import "common.proto"; // import "table_structure.proto"; service Adresar { - rpc PostAdresar (PostAdresarRequest) returns (AdresarResponse); - rpc GetAdresar (GetAdresarRequest) returns (AdresarResponse); - rpc PutAdresar (PutAdresarRequest) returns (AdresarResponse); - rpc DeleteAdresar (DeleteAdresarRequest) returns (DeleteAdresarResponse); - rpc GetAdresarCount (common.Empty) returns (common.CountResponse); - rpc GetAdresarByPosition (common.PositionRequest) returns (AdresarResponse); + rpc PostAdresar(PostAdresarRequest) returns (AdresarResponse); + rpc GetAdresar(GetAdresarRequest) returns (AdresarResponse); + rpc PutAdresar(PutAdresarRequest) returns (AdresarResponse); + rpc DeleteAdresar(DeleteAdresarRequest) returns (DeleteAdresarResponse); + rpc GetAdresarCount(common.Empty) returns (common.CountResponse); + rpc GetAdresarByPosition(common.PositionRequest) returns (AdresarResponse); } message GetAdresarRequest { - int64 id = 1; + int64 id = 1; } message DeleteAdresarRequest { - int64 id = 1; + int64 id = 1; } message PostAdresarRequest { - string firma = 1; - string kz = 2; - string drc = 3; - string ulica = 4; - string psc = 5; - string mesto = 6; - string stat = 7; - string banka = 8; - string ucet = 9; - string skladm = 10; - string ico = 11; - string kontakt = 12; - string telefon = 13; - string skladu = 14; - string fax = 15; + string firma = 1; + string kz = 2; + string drc = 3; + string ulica = 4; + string psc = 5; + string mesto = 6; + string stat = 7; + string banka = 8; + string ucet = 9; + string skladm = 10; + string ico = 11; + string kontakt = 12; + string telefon = 13; + string skladu = 14; + string fax = 15; } message AdresarResponse { - int64 id = 1; - string firma = 2; - string kz = 3; - string drc = 4; - string ulica = 5; - string psc = 6; - string mesto = 7; - string stat = 8; - string banka = 9; - string ucet = 10; - string skladm = 11; - string ico = 12; - string kontakt = 13; - string telefon = 14; - string skladu = 15; - string fax = 16; + int64 id = 1; + string firma = 2; + string kz = 3; + string drc = 4; + string ulica = 5; + string psc = 6; + string mesto = 7; + string stat = 8; + string banka = 9; + string ucet = 10; + string skladm = 11; + string ico = 12; + string kontakt = 13; + string telefon = 14; + string skladu = 15; + string fax = 16; } message PutAdresarRequest { - int64 id = 1; - string firma = 2; - string kz = 3; - string drc = 4; - string ulica = 5; - string psc = 6; - string mesto = 7; - string stat = 8; - string banka = 9; - string ucet = 10; - string skladm = 11; - string ico = 12; - string kontakt = 13; - string telefon = 14; - string skladu = 15; - string fax = 16; + int64 id = 1; + string firma = 2; + string kz = 3; + string drc = 4; + string ulica = 5; + string psc = 6; + string mesto = 7; + string stat = 8; + string banka = 9; + string ucet = 10; + string skladm = 11; + string ico = 12; + string kontakt = 13; + string telefon = 14; + string skladu = 15; + string fax = 16; } message DeleteAdresarResponse { - bool success = 1; + bool success = 1; } diff --git a/common/proto/auth.proto b/common/proto/auth.proto index 5a1a442..759bb29 100644 --- a/common/proto/auth.proto +++ b/common/proto/auth.proto @@ -5,35 +5,35 @@ package komp_ac.auth; import "common.proto"; service AuthService { - rpc Register(RegisterRequest) returns (AuthResponse); - rpc Login(LoginRequest) returns (LoginResponse); + rpc Register(RegisterRequest) returns (AuthResponse); + rpc Login(LoginRequest) returns (LoginResponse); } message RegisterRequest { - string username = 1; - string email = 2; - string password = 3; - string password_confirmation = 4; - string role = 5; + string username = 1; + string email = 2; + string password = 3; + string password_confirmation = 4; + string role = 5; } message AuthResponse { - string id = 1; // UUID in string format - string username = 2; // Registered username - string email = 3; // Registered email (if provided) - string role = 4; // Default role: 'accountant' + string id = 1; // UUID in string format + string username = 2; // Registered username + string email = 3; // Registered email (if provided) + string role = 4; // Default role: 'accountant' } message LoginRequest { - string identifier = 1; // Can be username or email - string password = 2; + string identifier = 1; // Can be username or email + string password = 2; } message LoginResponse { - string access_token = 1; // JWT token - string token_type = 2; // Usually "Bearer" - int32 expires_in = 3; // Expiration in seconds (86400 for 24 hours) - string user_id = 4; // User's UUID in string format - string role = 5; // User's role - string username = 6; + string access_token = 1; // JWT token + string token_type = 2; // Usually "Bearer" + int32 expires_in = 3; // Expiration in seconds (86400 for 24 hours) + string user_id = 4; // User's UUID in string format + string role = 5; // User's role + string username = 6; } diff --git a/common/proto/common.proto b/common/proto/common.proto index 7ae4ba0..073e01c 100644 --- a/common/proto/common.proto +++ b/common/proto/common.proto @@ -3,5 +3,9 @@ syntax = "proto3"; package komp_ac.common; message Empty {} -message CountResponse { int64 count = 1; } -message PositionRequest { int64 position = 1; } +message CountResponse { + int64 count = 1; +} +message PositionRequest { + int64 position = 1; +} diff --git a/common/proto/search.proto b/common/proto/search.proto index 8610a6b..8f91477 100644 --- a/common/proto/search.proto +++ b/common/proto/search.proto @@ -3,18 +3,18 @@ syntax = "proto3"; package komp_ac.search; service Searcher { - rpc SearchTable(SearchRequest) returns (SearchResponse); + rpc SearchTable(SearchRequest) returns (SearchResponse); } message SearchRequest { - string table_name = 1; - string query = 2; + string table_name = 1; + string query = 2; } message SearchResponse { - message Hit { - int64 id = 1; // PostgreSQL row ID - float score = 2; - string content_json = 3; - } - repeated Hit hits = 1; + message Hit { + int64 id = 1; // PostgreSQL row ID + float score = 2; + string content_json = 3; + } + repeated Hit hits = 1; } diff --git a/common/proto/search2.proto b/common/proto/search2.proto index abdd19a..3ac7dfb 100644 --- a/common/proto/search2.proto +++ b/common/proto/search2.proto @@ -3,44 +3,44 @@ syntax = "proto3"; package komp_ac.search2; service Search2 { - rpc SearchTable(Search2Request) returns (Search2Response); + rpc SearchTable(Search2Request) returns (Search2Response); } message Search2Request { string profile_name = 1; string table_name = 2; repeated ColumnFilter column_filters = 3; - optional string text_query = 4; // Optional fallback text search + optional string text_query = 4; // Optional fallback text search optional int32 limit = 5; optional string order_by = 6; optional bool order_desc = 7; } message ColumnFilter { - string column_name = 1; - FilterType filter_type = 2; - string value = 3; - optional string value2 = 4; // For range queries + string column_name = 1; + FilterType filter_type = 2; + string value = 3; + optional string value2 = 4; // For range queries } enum FilterType { - EQUALS = 0; - CONTAINS = 1; - STARTS_WITH = 2; - ENDS_WITH = 3; - RANGE = 4; - GREATER_THAN = 5; - LESS_THAN = 6; - IS_NULL = 7; - IS_NOT_NULL = 8; + EQUALS = 0; + CONTAINS = 1; + STARTS_WITH = 2; + ENDS_WITH = 3; + RANGE = 4; + GREATER_THAN = 5; + LESS_THAN = 6; + IS_NULL = 7; + IS_NOT_NULL = 8; } message Search2Response { - message Hit { - int64 id = 1; - string content_json = 2; // No score - this is SQL-based - optional string match_info = 3; // Info about which columns matched - } - repeated Hit hits = 1; - int32 total_count = 2; // Total matching records (for pagination) + message Hit { + int64 id = 1; + string content_json = 2; // No score - this is SQL-based + optional string match_info = 3; // Info about which columns matched + } + repeated Hit hits = 1; + int32 total_count = 2; // Total matching records (for pagination) } diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index 91effd8..1131d63 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -12,17 +12,14 @@ service TableDefinition { // Creates a new table (and schema if missing) with system columns, // linked-table foreign keys, user-defined columns, and optional indexes. // Also inserts metadata and default validation rules. Entirely transactional. - rpc PostTableDefinition(PostTableDefinitionRequest) - returns (TableDefinitionResponse); + rpc PostTableDefinition(PostTableDefinitionRequest) returns (TableDefinitionResponse); // Lists all profiles (schemas) and their tables with declared dependencies. // This provides a tree-like overview of table relationships. - rpc GetProfileTree(komp_ac.common.Empty) - returns (ProfileTreeResponse); + rpc GetProfileTree(komp_ac.common.Empty) returns (ProfileTreeResponse); // Drops a table and its metadata, then deletes the profile if it becomes empty. - rpc DeleteTable(DeleteTableRequest) - returns (DeleteTableResponse); + rpc DeleteTable(DeleteTableRequest) returns (DeleteTableResponse); } // A single link to another table within the same profile (schema). diff --git a/common/proto/table_structure.proto b/common/proto/table_structure.proto index ac45f6c..3c559d9 100644 --- a/common/proto/table_structure.proto +++ b/common/proto/table_structure.proto @@ -23,8 +23,7 @@ service TableStructureService { // - Normalizes data_type text (details under TableColumn.data_type) // - Returns an empty list if the table is validated but has no visible // columns in information_schema (e.g., physical table missing) - rpc GetTableStructure(GetTableStructureRequest) - returns (TableStructureResponse); + rpc GetTableStructure(GetTableStructureRequest) returns (TableStructureResponse); } // Request identifying the profile (schema) and table to inspect. diff --git a/common/proto/table_validation.proto b/common/proto/table_validation.proto index 4ffe9ec..1356123 100644 --- a/common/proto/table_validation.proto +++ b/common/proto/table_validation.proto @@ -53,8 +53,8 @@ message CharacterLimits { // Mask for pretty display message DisplayMask { - string pattern = 1; // e.g., "(###) ###-####" or "####-##-##" - string input_char = 2; // e.g., "#" + string pattern = 1; // e.g., "(###) ###-####" or "####-##-##" + string input_char = 2; // e.g., "#" optional string template_char = 3; // e.g., "_" } @@ -94,11 +94,9 @@ message PatternRules { // Service to fetch validations for a table service TableValidationService { - rpc GetTableValidation(GetTableValidationRequest) - returns (TableValidationResponse); + rpc GetTableValidation(GetTableValidationRequest) returns (TableValidationResponse); - rpc UpdateFieldValidation(UpdateFieldValidationRequest) - returns (UpdateFieldValidationResponse); + rpc UpdateFieldValidation(UpdateFieldValidationRequest) returns (UpdateFieldValidationResponse); } message UpdateFieldValidationRequest { diff --git a/common/proto/uctovnictvo.proto b/common/proto/uctovnictvo.proto index 1c4a4c3..d103314 100644 --- a/common/proto/uctovnictvo.proto +++ b/common/proto/uctovnictvo.proto @@ -5,57 +5,57 @@ package komp_ac.uctovnictvo; import "common.proto"; service Uctovnictvo { - rpc PostUctovnictvo (PostUctovnictvoRequest) returns (UctovnictvoResponse); - rpc GetUctovnictvo (GetUctovnictvoRequest) returns (UctovnictvoResponse); - rpc GetUctovnictvoCount (common.Empty) returns (common.CountResponse); - rpc GetUctovnictvoByPosition (common.PositionRequest) returns (UctovnictvoResponse); - rpc PutUctovnictvo (PutUctovnictvoRequest) returns (UctovnictvoResponse); + rpc PostUctovnictvo(PostUctovnictvoRequest) returns (UctovnictvoResponse); + rpc GetUctovnictvo(GetUctovnictvoRequest) returns (UctovnictvoResponse); + rpc GetUctovnictvoCount(common.Empty) returns (common.CountResponse); + rpc GetUctovnictvoByPosition(common.PositionRequest) returns (UctovnictvoResponse); + rpc PutUctovnictvo(PutUctovnictvoRequest) returns (UctovnictvoResponse); } message PostUctovnictvoRequest { - int64 adresar_id = 1; - string c_dokladu = 2; - string datum = 3; // Use string for simplicity, or use google.protobuf.Timestamp for better date handling - string c_faktury = 4; - string obsah = 5; - string stredisko = 6; - string c_uctu = 7; - string md = 8; - string identif = 9; - string poznanka = 10; - string firma = 11; + int64 adresar_id = 1; + string c_dokladu = 2; + string datum = 3; // Use string for simplicity, or use google.protobuf.Timestamp for better date handling + string c_faktury = 4; + string obsah = 5; + string stredisko = 6; + string c_uctu = 7; + string md = 8; + string identif = 9; + string poznanka = 10; + string firma = 11; } message UctovnictvoResponse { - int64 id = 1; - int64 adresar_id = 2; - string c_dokladu = 3; - string datum = 4; - string c_faktury = 5; - string obsah = 6; - string stredisko = 7; - string c_uctu = 8; - string md = 9; - string identif = 10; - string poznanka = 11; - string firma = 12; + int64 id = 1; + int64 adresar_id = 2; + string c_dokladu = 3; + string datum = 4; + string c_faktury = 5; + string obsah = 6; + string stredisko = 7; + string c_uctu = 8; + string md = 9; + string identif = 10; + string poznanka = 11; + string firma = 12; } message PutUctovnictvoRequest { - int64 id = 1; - int64 adresar_id = 2; - string c_dokladu = 3; - string datum = 4; - string c_faktury = 5; - string obsah = 6; - string stredisko = 7; - string c_uctu = 8; - string md = 9; - string identif = 10; - string poznanka = 11; - string firma = 12; + int64 id = 1; + int64 adresar_id = 2; + string c_dokladu = 3; + string datum = 4; + string c_faktury = 5; + string obsah = 6; + string stredisko = 7; + string c_uctu = 8; + string md = 9; + string identif = 10; + string poznanka = 11; + string firma = 12; } message GetUctovnictvoRequest { - int64 id = 1; + int64 id = 1; } diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 62c30d1cf4ab22c1be727a12b58086f0b761e6fc..a212cd5f1b6f2bb672b30d70e978c36b5f711964 100644 GIT binary patch delta 10345 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 TGRNw(9Fpc(eKwP|HS7NY6!)hc delta 10387 zcmZ8nYiwl6RqlIlb^G>h_rtfl-FCa(-R^d~{pj|1{2tHC_Sl{o&to%eX36f5+3e2y z!OpB_2Wf&;l&xuA`JM*Bn%ypdFfd9+U>10nMODl$tCyo#8kU8~3}J?bg5#6FFRIR)CN&}i32 zjkO+((>{%gIrOZGxwuBwDYR=_Ooe90RtS$py zTX-4p+OoO~cj%KxE$GEBmiumWZOX0#`_Nh+DYDj(s!zy^x~0K5$`M;hGVrJ{{`vM3a3a8qVU8r&2bX>ikO5Iw=$lxd>pDKSSH zJS9BR;3+Xj8ayTDpusIMM;hD`8fkD#oI)Dh5^JQvZQe+wHMlK2(%?3W0&U=Jvj!Du za7WCM26u!;8r%_cq`@6A2MwMUn%3ZH;gJSUi#gKZY1W`34W8jB1%SCTLL&{H;V4BL zXlFP|6>0FSERHmIR%oQbvsQ!X3Eo-OpdtQk{FGa5uZMYUqqe$e7tgO`-AzkEO#l>)sHZb~TR_M!#HVoz~TOgB8eP0)u)C8KJDKm{!>$m20#)yR~6&or_B^U}>>r9WkgR3Hr2KWK^)J%==h9{@a-78=bc%~6Xs(9#^WG0Genu|}CA z1DehpXag@J<|tWY#2i3Y>9YjNf65$LF-Msro6?@5HtN|N*EI$X9if-weFXq5Cp5|& zIiryPJjxuoFdxm9n_xvRmRmF2)tna!oYKsBp@5Xu(8o)RQdC3HN9E>0e{w*P7vg9K z6tR%5?hgkHs$%q?<=KP&wD3W8n4?qXARIQO`(s)qRfu*+rmHd^T5*Zx?dTPkF!K*a zF!OTsJ0p{qxu-d}jHKjHgTY3IhPjHxAQj#UxE{VaI7!d~D!c%+fmRtTMT?c@j;b_L z_1z!;bp5Rd_insljsm9Wvz59j`syiDSDT`*ULFZ*SdK3G#xTiWsnqTAO|>`1lQh-d z7$$i{_lLV0YB>7m%GyCuN$zR{=5%4Iyhdp#n9=<))ut*%7e+fhb^;1I^l!>Xn*yX+ z91P03KLTW26&mUK(BL^q2Khqttlq4vfjAjbjz>u$-JeBVCkWA1N5(Hke^PJukX|xD zpZOKNGMU@~#`H3X)-%vgPw&rEFJru^Xt+~86xNRG6z3^ zpUaLMVDNL*nht45GxS3C5dii!RC3D4S3OLd42(7m6Al<%0AY}DX!!NS!@UP@Jy;07 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 Oq&ZU`&F1Vy@&5xJ60)}d diff --git a/flake.nix b/flake.nix index ab5d720..770726c 100644 --- a/flake.nix +++ b/flake.nix @@ -38,6 +38,7 @@ # Protocol Buffers compiler for gRPC protobuf protoc-gen-doc + buf ]; shellHook = '' diff --git a/server b/server index e497676..a398d72 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit e4976767898b0c4e3b137fac3107a1eff6aa1399 +Subproject commit a398d721457eab5956e6516c8fcb87c3b54e603f