22//! spec.
33
44mod error;
5+ mod rules;
56mod signed_doc_spec;
7+ mod types_consts;
68
7- use proc_macro2:: TokenStream ;
8- use quote:: quote;
9+ use crate :: error:: process_error;
910
10- use crate :: { error :: process_error , signed_doc_spec :: CatalystSignedDocSpec } ;
11-
12- /// Defines consts for all Catalyst Signed Documents types values
13- /// e.g .
11+ /// Defines consts for all Catalyst Signed Documents types values, which are
12+ /// defined inside the `signed_doc.json` spec.
13+ ///
14+ /// E.G .
1415/// ```ignore
1516/// pub const PROPOSAL: DocType = DocType::try_from_uuid(catalyst_types::uuid::uuid!(
1617/// "7808d2ba-d511-40af-84e8-c0d1625fdfdc"
@@ -20,33 +21,21 @@ use crate::{error::process_error, signed_doc_spec::CatalystSignedDocSpec};
2021pub fn catalyst_signed_documents_types_consts (
2122 _: proc_macro:: TokenStream
2223) -> proc_macro:: TokenStream {
23- catalyst_signed_documents_types_consts_impl ( )
24+ types_consts :: catalyst_signed_documents_types_consts_impl ( )
2425 . unwrap_or_else ( process_error)
2526 . into ( )
2627}
2728
28- /// `catalyst_signed_documents_types_consts` macro implementation
29- fn catalyst_signed_documents_types_consts_impl ( ) -> anyhow:: Result < TokenStream > {
30- let spec = CatalystSignedDocSpec :: load_signed_doc_spec ( ) ?;
31-
32- let mut consts_definitions = Vec :: new ( ) ;
33- for ( doc_name, doc_spec) in spec. docs {
34- let const_type_name_ident = doc_name. ident ( ) ;
35- let doc_name = doc_name. name ( ) ;
36- let type_uuid = doc_spec. doc_type ;
37-
38- let const_definition = quote ! {
39- #[ doc = #doc_name ]
40- #[ doc = "type constant definition" ]
41- pub const #const_type_name_ident: crate :: DocType = match crate :: DocType :: try_from_uuid( catalyst_types:: uuid:: uuid!( #type_uuid) ) {
42- Ok ( v) => v,
43- Err ( _) => panic!( "invalid uuid v4 value" ) ,
44- } ;
45- } ;
46- consts_definitions. push ( const_definition) ;
47- }
48-
49- Ok ( quote ! {
50- #( #consts_definitions) *
51- } )
29+ /// Defines `documents_rules` function which will return a defined
30+ /// `catalyst_signed_doc::Rules` instances for each corresponding document type, which are
31+ /// defined inside the `signed_doc.json` spec.
32+ ///
33+ /// ```ignore
34+ /// fn documents_rules() -> impl Iterator<Item = (DocType, Rules)>
35+ /// ```
36+ #[ proc_macro]
37+ pub fn catalyst_signed_documents_rules ( _: proc_macro:: TokenStream ) -> proc_macro:: TokenStream {
38+ rules:: catalyst_signed_documents_rules_impl ( )
39+ . unwrap_or_else ( process_error)
40+ . into ( )
5241}
0 commit comments