From 1cedd587082e14d77000bbd2142c8df87d3587c6 Mon Sep 17 00:00:00 2001 From: Priec Date: Thu, 18 Dec 2025 20:04:03 +0100 Subject: [PATCH] serialization and gitignore in canvas --- canvas | 2 +- common/build.rs | 12 +++++ common/src/proto/descriptor.bin | Bin 50754 -> 52616 bytes common/src/proto/komp_ac.table_validation.rs | 48 ++++++++++++++++++- 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/canvas b/canvas index 29fdc5a..6f1cda3 160000 --- a/canvas +++ b/canvas @@ -1 +1 @@ -Subproject commit 29fdc5a6c73d4d5950123cf1be783b6ba5a5a917 +Subproject commit 6f1cda36d86f689fc03fd9978f3259d9a79a80b7 diff --git a/common/build.rs b/common/build.rs index 2440bb0..cbc3634 100644 --- a/common/build.rs +++ b/common/build.rs @@ -20,6 +20,18 @@ fn main() -> Result<(), Box> { ".komp_ac.table_validation.TableValidationResponse", "#[derive(serde::Serialize, serde::Deserialize)]", ) + .type_attribute( + ".komp_ac.table_validation.PatternRule", + "#[derive(serde::Serialize, serde::Deserialize)]", + ) + .type_attribute( + ".komp_ac.table_validation.PatternRules", + "#[derive(serde::Serialize, serde::Deserialize)]", + ) + .type_attribute( + ".komp_ac.table_validation.CustomFormatter", + "#[derive(serde::Serialize, serde::Deserialize)]", + ) .type_attribute( ".komp_ac.table_validation.UpdateFieldValidationRequest", "#[derive(serde::Serialize, serde::Deserialize)]", diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index a093404b00603f5e9a5ce9206fbc6cfc7331337f..62c30d1cf4ab22c1be727a12b58086f0b761e6fc 100644 GIT binary patch delta 3185 zcmaJ@U2hv%8TK5H9s4*W?Idj+H{G60lWx*=ve}e2AKjw1`CzlOb#Xs7s4LQ`J&C6o z&&-a;O;%h?g#_%yN(d~j5Gy1kxCP}G!2SY$01_&21>z4Nt$5xuXB@-D`pVCFzn=Gf z&w1bZ)92aGewqFKw-4EG7JEB~|7L$)M@qs$tyY#eF|)OIdlO_Xkg0+URy7zrCHFevql3s(hwtz2CVXjocmPe6MeK@|8QU z#W#6rAcir{bD`xO*kuhQiuD8-=XrkLaY3%kUj8>`d8ui4 z8le+Jj_)NtK#&e^rKjL{cZ3h`4JevF)cEiKxsGuY?5Gl8mqm$YsYDM3G{Bd{Ul;J} z;(e*{sos0Rxs%)8F)RM-63-jDmigr5kHMFk_SVUd!euR9;=0ZlGqPniRT&f8-KZPd z!afcxuY=^)xj7=9TCUTyC|9w}`7qCsMV?HMVS+TE(eo+F0!?1vE7CW>B)e)}9dz?e z@#b|;G`gJ_O%|$!j&~qj|G;UaF|sY(j~2 zm{r&}QUtTgh>@b~8NhSr`FEvV&d6Tu%}2Gx9Q|W?rImxt#i7v@A=E`Y=)(Z)UlbqA}GzWapi+5Gs{MKIf^vx)lg}#{vvjv!aB+Wo$ zsrQdp-&MWj)l zL<^X%8~TmRdhgFivm-YOWBfWi=#=D2Pd{FXR}@(u~8Kr zr|q~_C?a2Mw5-r-VB*Ewa`1_F#6x9Yr}@b7%j$H~Z=q!Wq>GWGnr*VN%3m}gbwoPL z{BT{g{3EeXzFW4SXu=8t*ReZXY#m$e08?w73$Y-~B~z&1n;-vNJc{wkp`DT!OG<0u zn$jb!B;3;C;x*xT4Y%8IUfGG>e(1N?uahe2Z3CUUx-NY0$O@avV|BSI6{Y6=t{XXE zCE})o$!$lc6go*~kuKV>sX7aUT5J}R0SAOOY@Rjvuae3@w!_9NKh;hPE0T>OXj@c8 z106wQ9IsEgg85az>28+`|6HO4{9_w0cqVQz$W(}_0FyZ<@fw4wpMBscIvZZ(w~5J=aG z$#@4sYPBduahW<43u~vCUZ1}Dl+YPx$ z{r%Lvd_Emog1Emnu959Fljk@DpHBz>gQ9pLsbY(%@ab0B-wX8_AtwURM1NjmM zM!>)(g)NxxO6GBnTwy2fmXdW1gfP1kQ<6FmsPA49{6iTOqGu@Ktjhp^Iu+>ifRcE!^KR3A(LE4BH^ei?NKl@se9u-?{f1=yo~il)Q6yDAAdq;5`rY6x zk0ra8v3vhHz7g*g-hwYZPfJ#R&a64|ObEu$^Kx|%!r*;Axtz-2${M|*>@-7fu;!wY zQP4*ILW*G5m|9H{?3$xh`AQ0gevomsSU!^ij1CI4e09A*U1_mNvLS%0*-}>%2#T$u zT+1Ybzt%)qnL*^JPn3eJgwr=8Qcf}XM1c%u4!%$*T3n#D|B@w34*=m__U&kIyj1H9 zGT6PuI!jmr9I|P}GK=mXstsOXv_}t(r29amiSE;EC>pw#`6QVQMQC|(0bjo0QKYPW zmTWx$(D2pQ5)d@~p=53X!Jm)0nV3NoDE38}b)eV-kxa1%f>|&&{vscQe&k={UzvRB Mz&}~|!MX4J7t_8$!vFvP delta 1375 zcmX|BO-~b16rH*AW@sPS!nDu=RfbX&X+u*8Z9zal+Cun<5+~VP*)~CbUy13G1!gcBi_rv~jt8|>B;P0rkY@usAt!Dj7*RQwkHKz6Ef)s*? zY-5mOLs_SM+BmIOo$C4V?$ODM+R?mp?(a4l)%wxH(}U`XbKC~bqLa(rk+MgcthQKw z%||*=$o7!|)IT5}c=rG#C_1#}l+M|6_rQJka&^iu`Pfnl1NuZ)*heg}BQhh&)NJ8s zhckYNzmFvfUypd zKpZ2V$nzQN5YbVJqRNB2O;K3J+jkparqFIdk}zyBp-sDg&kEs*KumttF#>}dPP^>B$O!)Fa4&ZSgi?n36j8^ZG94L*$#i5oWEsdFdor|2y8jkC5lGTcHCXECy@CkDv5KQD5VIqFt7bIe>%zmJ#^AH)-o5Vn}r=G^q< zcxW~dk+X0R95U}dy(~=TRkt{TLq6E+IRL>SABoDiM@OmPe!CoM7CLkeR|rNFox>Fd zVv3G%MM@>Ro$A!yRK`g@OSUs&6$O_%2#Jd-F=}uu+9S%56Bm(zfc}B2K-nx(DK#>K+KP?MU>wbzHACYBTa*QYQ9lt&`XNoBshS-G#XT diff --git a/common/src/proto/komp_ac.table_validation.rs b/common/src/proto/komp_ac.table_validation.rs index dbd6ba4..befe58c 100644 --- a/common/src/proto/komp_ac.table_validation.rs +++ b/common/src/proto/komp_ac.table_validation.rs @@ -26,7 +26,13 @@ pub struct FieldValidation { #[prost(message, optional, tag = "10")] pub limits: ::core::option::Option, /// Future expansion: - /// PatternRules pattern = 11; + /// + /// Validation 2 + #[prost(message, optional, tag = "11")] + pub pattern: ::core::option::Option, + /// Validation 4 – custom formatting logic + #[prost(message, optional, tag = "14")] + pub formatter: ::core::option::Option, #[prost(message, optional, tag = "3")] pub mask: ::core::option::Option, /// ExternalValidation external = 13; @@ -65,6 +71,46 @@ pub struct DisplayMask { #[prost(string, optional, tag = "3")] pub template_char: ::core::option::Option<::prost::alloc::string::String>, } +/// One position‑based validation rule, similar to CharacterFilter + PositionRange +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PatternRule { + /// Range descriptor: how far the rule applies + /// Examples: + /// - "0" → Single position 0 + /// - "0-3" → Range 0..3 inclusive + /// - "from:5" → From position 5 onward + /// - "0,2,5" → Multiple discrete positions + #[prost(string, tag = "1")] + pub range: ::prost::alloc::string::String, + /// Character filter type, case‑insensitive keywords: + /// "ALPHABETIC", "NUMERIC", "ALPHANUMERIC", + /// "ONEOF()", "EXACT(:)", "CUSTOM()" + #[prost(string, tag = "2")] + pub filter: ::prost::alloc::string::String, +} +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CustomFormatter { + /// Formatter type identifier; handled client‑side. + /// Examples: "PSCFormatter", "PhoneFormatter", "CreditCardFormatter", "DateFormatter" + #[prost(string, tag = "1")] + pub r#type: ::prost::alloc::string::String, + /// Optional free‑text note or parameters (e.g. locale, pattern) + #[prost(string, optional, tag = "2")] + pub description: ::core::option::Option<::prost::alloc::string::String>, +} +/// Collection of pattern rules for one field +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PatternRules { + /// All rules that make up the validation logic + #[prost(message, repeated, tag = "1")] + pub rules: ::prost::alloc::vec::Vec, + /// Optional human‑readable description for UI/debug purposes + #[prost(string, optional, tag = "2")] + pub description: ::core::option::Option<::prost::alloc::string::String>, +} #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct UpdateFieldValidationRequest {