From 7a0d0091e704bdde4054868c4bc502ffcf691a39 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Thu, 28 Aug 2025 22:37:45 +0400 Subject: [PATCH 01/10] wip --- .../src/validator/rules/{template.rs => content.rs} | 0 rust/signed_doc/src/validator/rules/content_type.rs | 1 - rust/signed_doc/src/validator/rules/doc_ref.rs | 3 +-- rust/signed_doc/src/validator/rules/id.rs | 1 + rust/signed_doc/src/validator/rules/mod.rs | 4 ++-- rust/signed_doc/src/validator/rules/parameters.rs | 1 - rust/signed_doc/src/validator/rules/reply.rs | 1 - rust/signed_doc/src/validator/rules/ver.rs | 1 + 8 files changed, 5 insertions(+), 7 deletions(-) rename rust/signed_doc/src/validator/rules/{template.rs => content.rs} (100%) diff --git a/rust/signed_doc/src/validator/rules/template.rs b/rust/signed_doc/src/validator/rules/content.rs similarity index 100% rename from rust/signed_doc/src/validator/rules/template.rs rename to rust/signed_doc/src/validator/rules/content.rs diff --git a/rust/signed_doc/src/validator/rules/content_type.rs b/rust/signed_doc/src/validator/rules/content_type.rs index 313d220ceb..dee1f0ba76 100644 --- a/rust/signed_doc/src/validator/rules/content_type.rs +++ b/rust/signed_doc/src/validator/rules/content_type.rs @@ -3,7 +3,6 @@ use crate::{metadata::ContentType, CatalystSignedDocument}; /// `content-type` field validation rule -#[derive(Clone, Debug, PartialEq)] pub(crate) struct ContentTypeRule { /// expected `content-type` field pub(crate) exp: ContentType, diff --git a/rust/signed_doc/src/validator/rules/doc_ref.rs b/rust/signed_doc/src/validator/rules/doc_ref.rs index eccb1d0a45..001ebe844c 100644 --- a/rust/signed_doc/src/validator/rules/doc_ref.rs +++ b/rust/signed_doc/src/validator/rules/doc_ref.rs @@ -8,7 +8,6 @@ use crate::{ }; /// `ref` field validation rule -#[derive(Clone, Debug, PartialEq)] pub(crate) enum RefRule { /// Is 'ref' specified Specified { @@ -52,7 +51,7 @@ impl RefRule { return Ok(false); } } - if &Self::NotSpecified == self { + if let Self::NotSpecified = self { if let Some(doc_ref) = doc.doc_meta().doc_ref() { doc.report().unknown_field( "ref", diff --git a/rust/signed_doc/src/validator/rules/id.rs b/rust/signed_doc/src/validator/rules/id.rs index 0d694e2b94..1e653b3009 100644 --- a/rust/signed_doc/src/validator/rules/id.rs +++ b/rust/signed_doc/src/validator/rules/id.rs @@ -7,6 +7,7 @@ use anyhow::Context; use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; /// Signed Document `id` field validation rule +#[derive(Default)] pub(crate) struct IdRule; impl IdRule { diff --git a/rust/signed_doc/src/validator/rules/mod.rs b/rust/signed_doc/src/validator/rules/mod.rs index be934089ab..7001a8d3e9 100644 --- a/rust/signed_doc/src/validator/rules/mod.rs +++ b/rust/signed_doc/src/validator/rules/mod.rs @@ -13,7 +13,7 @@ mod parameters; mod reply; mod section; mod signature_kid; -mod template; +mod content; mod ver; pub(crate) use content_encoding::ContentEncodingRule; @@ -24,7 +24,7 @@ pub(crate) use parameters::ParametersRule; pub(crate) use reply::ReplyRule; pub(crate) use section::SectionRule; pub(crate) use signature_kid::SignatureKidRule; -pub(crate) use template::{ContentRule, ContentSchema}; +pub(crate) use content::{ContentRule, ContentSchema}; pub(crate) use ver::VerRule; /// Struct represented a full collection of rules for all fields diff --git a/rust/signed_doc/src/validator/rules/parameters.rs b/rust/signed_doc/src/validator/rules/parameters.rs index e26fdcfdc2..f41385a42d 100644 --- a/rust/signed_doc/src/validator/rules/parameters.rs +++ b/rust/signed_doc/src/validator/rules/parameters.rs @@ -9,7 +9,6 @@ use crate::{ }; /// `parameters` field validation rule -#[derive(Clone, Debug, PartialEq)] pub(crate) enum ParametersRule { /// Is `parameters` specified Specified { diff --git a/rust/signed_doc/src/validator/rules/reply.rs b/rust/signed_doc/src/validator/rules/reply.rs index ecbf9b023f..8ff4bbb720 100644 --- a/rust/signed_doc/src/validator/rules/reply.rs +++ b/rust/signed_doc/src/validator/rules/reply.rs @@ -6,7 +6,6 @@ use crate::{ }; /// `reply` field validation rule -#[derive(Clone, Debug, PartialEq)] pub(crate) enum ReplyRule { /// Is 'reply' specified Specified { diff --git a/rust/signed_doc/src/validator/rules/ver.rs b/rust/signed_doc/src/validator/rules/ver.rs index d67aeef11e..411b656cd8 100644 --- a/rust/signed_doc/src/validator/rules/ver.rs +++ b/rust/signed_doc/src/validator/rules/ver.rs @@ -3,6 +3,7 @@ use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; /// Signed Document `ver` field validation rule +#[derive(Default)] pub(crate) struct VerRule; impl VerRule { From 9345cae8bd05ce9e266c937ddf809ae6fd2ff365 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Thu, 28 Aug 2025 22:45:54 +0400 Subject: [PATCH 02/10] wip --- rust/signed_doc/src/validator/rules/id.rs | 1 - rust/signed_doc/src/validator/rules/mod.rs | 4 ++-- rust/signed_doc/src/validator/rules/ver.rs | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/rust/signed_doc/src/validator/rules/id.rs b/rust/signed_doc/src/validator/rules/id.rs index 1e653b3009..0d694e2b94 100644 --- a/rust/signed_doc/src/validator/rules/id.rs +++ b/rust/signed_doc/src/validator/rules/id.rs @@ -7,7 +7,6 @@ use anyhow::Context; use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; /// Signed Document `id` field validation rule -#[derive(Default)] pub(crate) struct IdRule; impl IdRule { diff --git a/rust/signed_doc/src/validator/rules/mod.rs b/rust/signed_doc/src/validator/rules/mod.rs index 7001a8d3e9..6a4f1d4bef 100644 --- a/rust/signed_doc/src/validator/rules/mod.rs +++ b/rust/signed_doc/src/validator/rules/mod.rs @@ -5,6 +5,7 @@ use futures::FutureExt; use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; +mod content; mod content_encoding; mod content_type; mod doc_ref; @@ -13,9 +14,9 @@ mod parameters; mod reply; mod section; mod signature_kid; -mod content; mod ver; +pub(crate) use content::{ContentRule, ContentSchema}; pub(crate) use content_encoding::ContentEncodingRule; pub(crate) use content_type::ContentTypeRule; pub(crate) use doc_ref::RefRule; @@ -24,7 +25,6 @@ pub(crate) use parameters::ParametersRule; pub(crate) use reply::ReplyRule; pub(crate) use section::SectionRule; pub(crate) use signature_kid::SignatureKidRule; -pub(crate) use content::{ContentRule, ContentSchema}; pub(crate) use ver::VerRule; /// Struct represented a full collection of rules for all fields diff --git a/rust/signed_doc/src/validator/rules/ver.rs b/rust/signed_doc/src/validator/rules/ver.rs index 411b656cd8..d67aeef11e 100644 --- a/rust/signed_doc/src/validator/rules/ver.rs +++ b/rust/signed_doc/src/validator/rules/ver.rs @@ -3,7 +3,6 @@ use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; /// Signed Document `ver` field validation rule -#[derive(Default)] pub(crate) struct VerRule; impl VerRule { From d1a6287833e31f8a4533d3e5c91995908a49099b Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Fri, 29 Aug 2025 11:37:48 +0400 Subject: [PATCH 03/10] wip --- rust/catalyst-signed-doc-macro/src/lib.rs | 51 ++++++++----------- .../src/rules/mod.rs | 18 +++++++ .../src/types_consts.rs | 32 ++++++++++++ rust/signed_doc/src/validator/mod.rs | 7 +++ 4 files changed, 77 insertions(+), 31 deletions(-) create mode 100644 rust/catalyst-signed-doc-macro/src/rules/mod.rs create mode 100644 rust/catalyst-signed-doc-macro/src/types_consts.rs diff --git a/rust/catalyst-signed-doc-macro/src/lib.rs b/rust/catalyst-signed-doc-macro/src/lib.rs index ef56a68afb..bd30821277 100644 --- a/rust/catalyst-signed-doc-macro/src/lib.rs +++ b/rust/catalyst-signed-doc-macro/src/lib.rs @@ -2,15 +2,16 @@ //! spec. mod error; +mod rules; mod signed_doc_spec; +mod types_consts; -use proc_macro2::TokenStream; -use quote::quote; +use crate::error::process_error; -use crate::{error::process_error, signed_doc_spec::CatalystSignedDocSpec}; - -/// Defines consts for all Catalyst Signed Documents types values -/// e.g. +/// Defines consts for all Catalyst Signed Documents types values, which are +/// defined inside the `signed_doc.json` spec. +/// +/// E.G. /// ```ignore /// pub const PROPOSAL: DocType = DocType::try_from_uuid(catalyst_types::uuid::uuid!( /// "7808d2ba-d511-40af-84e8-c0d1625fdfdc" @@ -20,33 +21,21 @@ use crate::{error::process_error, signed_doc_spec::CatalystSignedDocSpec}; pub fn catalyst_signed_documents_types_consts( _: proc_macro::TokenStream ) -> proc_macro::TokenStream { - catalyst_signed_documents_types_consts_impl() + types_consts::catalyst_signed_documents_types_consts_impl() .unwrap_or_else(process_error) .into() } -/// `catalyst_signed_documents_types_consts` macro implementation -fn catalyst_signed_documents_types_consts_impl() -> anyhow::Result { - let spec = CatalystSignedDocSpec::load_signed_doc_spec()?; - - let mut consts_definitions = Vec::new(); - for (doc_name, doc_spec) in spec.docs { - let const_type_name_ident = doc_name.ident(); - let doc_name = doc_name.name(); - let type_uuid = doc_spec.doc_type; - - let const_definition = quote! { - #[doc = #doc_name ] - #[doc = "type constant definition"] - pub const #const_type_name_ident: crate::DocType = match crate::DocType::try_from_uuid(catalyst_types::uuid::uuid!(#type_uuid)) { - Ok(v) => v, - Err(_) => panic!("invalid uuid v4 value"), - }; - }; - consts_definitions.push(const_definition); - } - - Ok(quote! { - #(#consts_definitions)* - }) +/// Defines `documents_rules` function which will return a defined +/// `catalyst_signed_doc::Rules` instances for each corresponding document type, which are +/// defined inside the `signed_doc.json` spec. +/// +/// ```ignore +/// fn documents_rules() -> impl Iterator +/// ``` +#[proc_macro] +pub fn catalyst_signed_documents_rules(_: proc_macro::TokenStream) -> proc_macro::TokenStream { + rules::catalyst_signed_documents_rules_impl() + .unwrap_or_else(process_error) + .into() } diff --git a/rust/catalyst-signed-doc-macro/src/rules/mod.rs b/rust/catalyst-signed-doc-macro/src/rules/mod.rs new file mode 100644 index 0000000000..ac3fcf0538 --- /dev/null +++ b/rust/catalyst-signed-doc-macro/src/rules/mod.rs @@ -0,0 +1,18 @@ +//! catalyst_signed_documents_rules! macro implementation + +use proc_macro2::TokenStream; +use quote::quote; + +use crate::signed_doc_spec::CatalystSignedDocSpec; + +/// `catalyst_signed_documents_rules` macro implementation +pub(crate) fn catalyst_signed_documents_rules_impl() -> anyhow::Result { + let _spec = CatalystSignedDocSpec::load_signed_doc_spec()?; + + Ok(quote! { + /// Returns an iterator with all defined Catalyst Signed Documents validation rules per corresponding document type + fn documents_rules() -> impl Iterator { + [].into_iter() + } + }) +} diff --git a/rust/catalyst-signed-doc-macro/src/types_consts.rs b/rust/catalyst-signed-doc-macro/src/types_consts.rs new file mode 100644 index 0000000000..1ecabc76ff --- /dev/null +++ b/rust/catalyst-signed-doc-macro/src/types_consts.rs @@ -0,0 +1,32 @@ +//! catalyst_signed_documents_types_consts! macro implementation + +use proc_macro2::TokenStream; +use quote::quote; + +use crate::signed_doc_spec::CatalystSignedDocSpec; + +/// `catalyst_signed_documents_types_consts` macro implementation +pub(crate) fn catalyst_signed_documents_types_consts_impl() -> anyhow::Result { + let spec = CatalystSignedDocSpec::load_signed_doc_spec()?; + + let mut consts_definitions = Vec::new(); + for (doc_name, doc_spec) in spec.docs { + let const_type_name_ident = doc_name.ident(); + let doc_name = doc_name.name(); + let type_uuid = doc_spec.doc_type; + + let const_definition = quote! { + #[doc = #doc_name ] + #[doc = "type constant definition"] + pub const #const_type_name_ident: crate::DocType = match crate::DocType::try_from_uuid(catalyst_types::uuid::uuid!(#type_uuid)) { + Ok(v) => v, + Err(_) => panic!("invalid uuid v4 value"), + }; + }; + consts_definitions.push(const_definition); + } + + Ok(quote! { + #(#consts_definitions)* + }) +} diff --git a/rust/signed_doc/src/validator/mod.rs b/rust/signed_doc/src/validator/mod.rs index 4d370da1c9..e4d8d97f3e 100644 --- a/rust/signed_doc/src/validator/mod.rs +++ b/rust/signed_doc/src/validator/mod.rs @@ -9,6 +9,7 @@ use std::{ }; use anyhow::Context; +use catalyst_signed_doc_macro; use catalyst_types::{catalyst_id::role_index::RoleId, problem_report::ProblemReport}; use rules::{ ContentEncodingRule, ContentRule, ContentSchema, ContentTypeRule, IdRule, ParametersRule, @@ -26,6 +27,8 @@ use crate::{ CatalystSignedDocument, ContentEncoding, ContentType, }; +catalyst_signed_doc_macro::catalyst_signed_documents_rules!(); + /// A table representing a full set or validation rules per document id. static DOCUMENT_RULES: LazyLock>> = LazyLock::new(document_rules_init); @@ -159,6 +162,10 @@ fn proposal_submission_action_rule() -> Rules { fn document_rules_init() -> HashMap> { let mut document_rules_map = HashMap::new(); + for (doc_type, rule) in documents_rules() { + document_rules_map.insert(doc_type, Arc::new(rule)); + } + let proposal_rules = Arc::new(proposal_rule()); let comment_rules = Arc::new(proposal_comment_rule()); let action_rules = Arc::new(proposal_submission_action_rule()); From edc55e3483aeca2813017d4e5765d46074b13649 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Fri, 29 Aug 2025 11:57:54 +0400 Subject: [PATCH 04/10] wip --- .../src/rules/mod.rs | 39 +++++++++++++++++-- rust/signed_doc/src/validator/mod.rs | 5 +-- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/rust/catalyst-signed-doc-macro/src/rules/mod.rs b/rust/catalyst-signed-doc-macro/src/rules/mod.rs index ac3fcf0538..ba7d458a0b 100644 --- a/rust/catalyst-signed-doc-macro/src/rules/mod.rs +++ b/rust/catalyst-signed-doc-macro/src/rules/mod.rs @@ -7,12 +7,45 @@ use crate::signed_doc_spec::CatalystSignedDocSpec; /// `catalyst_signed_documents_rules` macro implementation pub(crate) fn catalyst_signed_documents_rules_impl() -> anyhow::Result { - let _spec = CatalystSignedDocSpec::load_signed_doc_spec()?; + let spec = CatalystSignedDocSpec::load_signed_doc_spec()?; + + let mut rules_definitions = Vec::new(); + for (doc_name, _doc_spec) in spec.docs { + let const_type_name_ident = doc_name.ident(); + + // TODO: impleemnt a proper initialisation for all specific validation rules + let rules = quote! { + crate::validator::rules::Rules { + id: crate::validator::rules::IdRule, + ver: crate::validator::rules::VerRule, + content_type: crate::validator::rules::ContentTypeRule { + exp: ContentType::Json, + }, + content_encoding: crate::validator::rules::ContentEncodingRule { + exp: ContentEncoding::Brotli, + optional: false, + }, + content: crate::validator::rules::ContentRule::NotSpecified, + parameters: crate::validator::rules::ParametersRule::NotSpecified, + doc_ref: crate::validator::rules::RefRule::NotSpecified, + reply: crate::validator::rules::ReplyRule::NotSpecified, + section: crate::validator::rules::SectionRule::NotSpecified, + kid: crate::validator::rules::SignatureKidRule { + exp: &[], + }, + } + }; + + let rule_defintion = quote! { + (#const_type_name_ident, #rules), + }; + rules_definitions.push(rule_defintion); + } Ok(quote! { /// Returns an iterator with all defined Catalyst Signed Documents validation rules per corresponding document type - fn documents_rules() -> impl Iterator { - [].into_iter() + fn documents_rules() -> impl Iterator { + [ #(#rules_definitions)* ].into_iter() } }) } diff --git a/rust/signed_doc/src/validator/mod.rs b/rust/signed_doc/src/validator/mod.rs index e4d8d97f3e..819aed053d 100644 --- a/rust/signed_doc/src/validator/mod.rs +++ b/rust/signed_doc/src/validator/mod.rs @@ -17,10 +17,7 @@ use rules::{ }; use crate::{ - doc_types::{ - BRAND_PARAMETERS, CAMPAIGN_PARAMETERS, CATEGORY_PARAMETERS, PROPOSAL, PROPOSAL_COMMENT, - PROPOSAL_COMMENT_FORM_TEMPLATE, PROPOSAL_FORM_TEMPLATE, PROPOSAL_SUBMISSION_ACTION, - }, + doc_types::*, metadata::DocType, providers::{CatalystSignedDocumentProvider, VerifyingKeyProvider}, signature::{tbs_data, Signature}, From 8fb77b75a327182f726508e63e576fe0f1f6b87e Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Fri, 29 Aug 2025 12:11:03 +0400 Subject: [PATCH 05/10] wip --- rust/signed_doc/src/validator/mod.rs | 21 +++++++------------ .../signed_doc/src/validator/rules/content.rs | 14 ++++++++++++- .../src/validator/rules/content_encoding.rs | 1 + .../src/validator/rules/content_type.rs | 1 + .../signed_doc/src/validator/rules/doc_ref.rs | 1 + rust/signed_doc/src/validator/rules/id.rs | 1 + rust/signed_doc/src/validator/rules/mod.rs | 1 + .../src/validator/rules/parameters.rs | 1 + rust/signed_doc/src/validator/rules/reply.rs | 1 + .../signed_doc/src/validator/rules/section.rs | 1 + .../src/validator/rules/signature_kid.rs | 1 + rust/signed_doc/src/validator/rules/ver.rs | 1 + 12 files changed, 30 insertions(+), 15 deletions(-) diff --git a/rust/signed_doc/src/validator/mod.rs b/rust/signed_doc/src/validator/mod.rs index 819aed053d..26a3329b0d 100644 --- a/rust/signed_doc/src/validator/mod.rs +++ b/rust/signed_doc/src/validator/mod.rs @@ -3,10 +3,7 @@ pub(crate) mod json_schema; pub(crate) mod rules; -use std::{ - collections::HashMap, - sync::{Arc, LazyLock}, -}; +use std::{collections::HashMap, sync::LazyLock}; use anyhow::Context; use catalyst_signed_doc_macro; @@ -27,7 +24,7 @@ use crate::{ catalyst_signed_doc_macro::catalyst_signed_documents_rules!(); /// A table representing a full set or validation rules per document id. -static DOCUMENT_RULES: LazyLock>> = LazyLock::new(document_rules_init); +static DOCUMENT_RULES: LazyLock> = LazyLock::new(document_rules_init); /// Proposal /// Require field: type, id, ver, template, parameters @@ -156,22 +153,18 @@ fn proposal_submission_action_rule() -> Rules { } /// `DOCUMENT_RULES` initialization function -fn document_rules_init() -> HashMap> { +fn document_rules_init() -> HashMap { let mut document_rules_map = HashMap::new(); for (doc_type, rule) in documents_rules() { - document_rules_map.insert(doc_type, Arc::new(rule)); + document_rules_map.insert(doc_type, rule); } - let proposal_rules = Arc::new(proposal_rule()); - let comment_rules = Arc::new(proposal_comment_rule()); - let action_rules = Arc::new(proposal_submission_action_rule()); - - document_rules_map.insert(PROPOSAL.clone(), Arc::clone(&proposal_rules)); - document_rules_map.insert(PROPOSAL_COMMENT.clone(), Arc::clone(&comment_rules)); + document_rules_map.insert(PROPOSAL.clone(), proposal_rule()); + document_rules_map.insert(PROPOSAL_COMMENT.clone(), proposal_comment_rule()); document_rules_map.insert( PROPOSAL_SUBMISSION_ACTION.clone(), - Arc::clone(&action_rules), + proposal_submission_action_rule(), ); document_rules_map diff --git a/rust/signed_doc/src/validator/rules/content.rs b/rust/signed_doc/src/validator/rules/content.rs index 31f88b052a..9a0aafcc37 100644 --- a/rust/signed_doc/src/validator/rules/content.rs +++ b/rust/signed_doc/src/validator/rules/content.rs @@ -1,6 +1,6 @@ //! `template` rule type impl. -use std::fmt::Write; +use std::fmt::{Debug, Write}; use crate::{ metadata::ContentType, @@ -16,7 +16,19 @@ pub(crate) enum ContentSchema { Json(json_schema::JsonSchema), } +impl Debug for ContentSchema { + fn fmt( + &self, + f: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { + match self { + Self::Json(_) => writeln!(f, "JsonSchema"), + } + } +} + /// Document's content validation rule +#[derive(Debug)] pub(crate) enum ContentRule { /// Based on the 'template' field and loaded corresponding template document Templated { diff --git a/rust/signed_doc/src/validator/rules/content_encoding.rs b/rust/signed_doc/src/validator/rules/content_encoding.rs index 7b56410672..9ebfb15432 100644 --- a/rust/signed_doc/src/validator/rules/content_encoding.rs +++ b/rust/signed_doc/src/validator/rules/content_encoding.rs @@ -3,6 +3,7 @@ use crate::{metadata::ContentEncoding, CatalystSignedDocument}; /// `content-encoding` field validation rule +#[derive(Debug)] pub(crate) struct ContentEncodingRule { /// expected `content-encoding` field pub(crate) exp: ContentEncoding, diff --git a/rust/signed_doc/src/validator/rules/content_type.rs b/rust/signed_doc/src/validator/rules/content_type.rs index dee1f0ba76..7cc31169e3 100644 --- a/rust/signed_doc/src/validator/rules/content_type.rs +++ b/rust/signed_doc/src/validator/rules/content_type.rs @@ -3,6 +3,7 @@ use crate::{metadata::ContentType, CatalystSignedDocument}; /// `content-type` field validation rule +#[derive(Debug)] pub(crate) struct ContentTypeRule { /// expected `content-type` field pub(crate) exp: ContentType, diff --git a/rust/signed_doc/src/validator/rules/doc_ref.rs b/rust/signed_doc/src/validator/rules/doc_ref.rs index 001ebe844c..05c19b6568 100644 --- a/rust/signed_doc/src/validator/rules/doc_ref.rs +++ b/rust/signed_doc/src/validator/rules/doc_ref.rs @@ -8,6 +8,7 @@ use crate::{ }; /// `ref` field validation rule +#[derive(Debug)] pub(crate) enum RefRule { /// Is 'ref' specified Specified { diff --git a/rust/signed_doc/src/validator/rules/id.rs b/rust/signed_doc/src/validator/rules/id.rs index 0d694e2b94..d279a8bf77 100644 --- a/rust/signed_doc/src/validator/rules/id.rs +++ b/rust/signed_doc/src/validator/rules/id.rs @@ -7,6 +7,7 @@ use anyhow::Context; use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; /// Signed Document `id` field validation rule +#[derive(Debug)] pub(crate) struct IdRule; impl IdRule { diff --git a/rust/signed_doc/src/validator/rules/mod.rs b/rust/signed_doc/src/validator/rules/mod.rs index 6a4f1d4bef..50173d1766 100644 --- a/rust/signed_doc/src/validator/rules/mod.rs +++ b/rust/signed_doc/src/validator/rules/mod.rs @@ -28,6 +28,7 @@ pub(crate) use signature_kid::SignatureKidRule; pub(crate) use ver::VerRule; /// Struct represented a full collection of rules for all fields +#[derive(Debug)] pub(crate) struct Rules { /// 'id' field validation rule pub(crate) id: IdRule, diff --git a/rust/signed_doc/src/validator/rules/parameters.rs b/rust/signed_doc/src/validator/rules/parameters.rs index f41385a42d..3e7e41cf09 100644 --- a/rust/signed_doc/src/validator/rules/parameters.rs +++ b/rust/signed_doc/src/validator/rules/parameters.rs @@ -9,6 +9,7 @@ use crate::{ }; /// `parameters` field validation rule +#[derive(Debug)] pub(crate) enum ParametersRule { /// Is `parameters` specified Specified { diff --git a/rust/signed_doc/src/validator/rules/reply.rs b/rust/signed_doc/src/validator/rules/reply.rs index 8ff4bbb720..95afba732c 100644 --- a/rust/signed_doc/src/validator/rules/reply.rs +++ b/rust/signed_doc/src/validator/rules/reply.rs @@ -6,6 +6,7 @@ use crate::{ }; /// `reply` field validation rule +#[derive(Debug)] pub(crate) enum ReplyRule { /// Is 'reply' specified Specified { diff --git a/rust/signed_doc/src/validator/rules/section.rs b/rust/signed_doc/src/validator/rules/section.rs index ea856f461d..33aba6eb1f 100644 --- a/rust/signed_doc/src/validator/rules/section.rs +++ b/rust/signed_doc/src/validator/rules/section.rs @@ -3,6 +3,7 @@ use crate::CatalystSignedDocument; /// `section` field validation rule +#[derive(Debug)] pub(crate) enum SectionRule { /// Is 'section' specified #[allow(dead_code)] diff --git a/rust/signed_doc/src/validator/rules/signature_kid.rs b/rust/signed_doc/src/validator/rules/signature_kid.rs index 0de1113e45..db69ffe568 100644 --- a/rust/signed_doc/src/validator/rules/signature_kid.rs +++ b/rust/signed_doc/src/validator/rules/signature_kid.rs @@ -5,6 +5,7 @@ use catalyst_types::catalyst_id::role_index::RoleId; use crate::CatalystSignedDocument; /// COSE signature `kid` (Catalyst Id) role validation +#[derive(Debug)] pub(crate) struct SignatureKidRule { /// expected `RoleId` values for the `kid` field pub(crate) exp: &'static [RoleId], diff --git a/rust/signed_doc/src/validator/rules/ver.rs b/rust/signed_doc/src/validator/rules/ver.rs index d67aeef11e..36878b945c 100644 --- a/rust/signed_doc/src/validator/rules/ver.rs +++ b/rust/signed_doc/src/validator/rules/ver.rs @@ -3,6 +3,7 @@ use crate::{providers::CatalystSignedDocumentProvider, CatalystSignedDocument}; /// Signed Document `ver` field validation rule +#[derive(Debug)] pub(crate) struct VerRule; impl VerRule { From cf5b5e46c41cdea4e28186038fdf5888e595728c Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Fri, 29 Aug 2025 12:23:12 +0400 Subject: [PATCH 06/10] fix spelling --- rust/catalyst-signed-doc-macro/src/rules/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/catalyst-signed-doc-macro/src/rules/mod.rs b/rust/catalyst-signed-doc-macro/src/rules/mod.rs index ba7d458a0b..d663f4e1f6 100644 --- a/rust/catalyst-signed-doc-macro/src/rules/mod.rs +++ b/rust/catalyst-signed-doc-macro/src/rules/mod.rs @@ -13,7 +13,7 @@ pub(crate) fn catalyst_signed_documents_rules_impl() -> anyhow::Result Date: Fri, 29 Aug 2025 12:50:18 +0400 Subject: [PATCH 07/10] fix spelling --- rust/catalyst-signed-doc-macro/src/rules/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/catalyst-signed-doc-macro/src/rules/mod.rs b/rust/catalyst-signed-doc-macro/src/rules/mod.rs index d663f4e1f6..5ae10070be 100644 --- a/rust/catalyst-signed-doc-macro/src/rules/mod.rs +++ b/rust/catalyst-signed-doc-macro/src/rules/mod.rs @@ -13,7 +13,7 @@ pub(crate) fn catalyst_signed_documents_rules_impl() -> anyhow::Result anyhow::Result Date: Mon, 1 Sep 2025 10:01:14 +0400 Subject: [PATCH 08/10] fix clippy --- rust/catalyst-signed-doc-macro/src/rules/mod.rs | 4 ++-- rust/catalyst-signed-doc-macro/src/types_consts.rs | 2 +- rust/signed_doc/src/validator/mod.rs | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/rust/catalyst-signed-doc-macro/src/rules/mod.rs b/rust/catalyst-signed-doc-macro/src/rules/mod.rs index 5ae10070be..dafb896e09 100644 --- a/rust/catalyst-signed-doc-macro/src/rules/mod.rs +++ b/rust/catalyst-signed-doc-macro/src/rules/mod.rs @@ -1,4 +1,4 @@ -//! catalyst_signed_documents_rules! macro implementation +//! `catalyst_signed_documents_rules!` macro implementation use proc_macro2::TokenStream; use quote::quote; @@ -37,7 +37,7 @@ pub(crate) fn catalyst_signed_documents_rules_impl() -> anyhow::Result Date: Mon, 1 Sep 2025 13:12:39 +0400 Subject: [PATCH 09/10] wip --- rust/catalyst-signed-doc-macro/src/rules/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rust/catalyst-signed-doc-macro/src/rules/mod.rs b/rust/catalyst-signed-doc-macro/src/rules/mod.rs index dafb896e09..cca3014436 100644 --- a/rust/catalyst-signed-doc-macro/src/rules/mod.rs +++ b/rust/catalyst-signed-doc-macro/src/rules/mod.rs @@ -33,6 +33,9 @@ pub(crate) fn catalyst_signed_documents_rules_impl() -> anyhow::Result Date: Mon, 1 Sep 2025 13:14:50 +0400 Subject: [PATCH 10/10] wip --- rust/signed_doc/src/validator/mod.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/rust/signed_doc/src/validator/mod.rs b/rust/signed_doc/src/validator/mod.rs index 591e2945b0..983b851ab0 100644 --- a/rust/signed_doc/src/validator/mod.rs +++ b/rust/signed_doc/src/validator/mod.rs @@ -159,12 +159,10 @@ fn proposal_submission_action_rule() -> Rules { /// `DOCUMENT_RULES` initialization function fn document_rules_init() -> HashMap { - let mut document_rules_map = HashMap::new(); - - for (doc_type, rule) in documents_rules() { - document_rules_map.insert(doc_type, rule); - } + let mut document_rules_map: HashMap = documents_rules().collect(); + // TODO: remove this redefinitions of the validation rules after + // `catalyst_signed_documents_rules!` macro would be fully finished document_rules_map.insert(PROPOSAL.clone(), proposal_rule()); document_rules_map.insert(PROPOSAL_COMMENT.clone(), proposal_comment_rule()); document_rules_map.insert(