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 a093404..62c30d1 100644 Binary files a/common/src/proto/descriptor.bin and b/common/src/proto/descriptor.bin differ 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 {