diff --git a/module/core/former/src/axiomatic.rs b/module/core/former/src/axiomatic.rs index b0f1dc4b0b..34f191ded4 100644 --- a/module/core/former/src/axiomatic.rs +++ b/module/core/former/src/axiomatic.rs @@ -218,14 +218,6 @@ for FormingEndClosure< Definition > pub trait FormerBegin< Definition : FormerDefinition > { - /// * `End` - A trait bound marking the closure or handler invoked upon completing the subforming process. Implementers - /// of this trait (`End`) are tasked with applying the final transformations that transition `Storage` - /// into `Formed`, optionally utilizing `Context` to guide this transformation. It is crucial that this - /// associated type satisfies the `FormingEnd< Formed >` trait, defining the precise mechanics of - /// how the subformer concludes its operation. - // type End : FormingEnd< Definition >; - // type End : Definition::End; - /// Launches the subforming process with an initial storage and context, setting up an `on_end` completion handler. /// /// # Parameters diff --git a/module/core/former/tests/inc/former_tests/a_primitives_manual.rs b/module/core/former/tests/inc/former_tests/a_primitives_manual.rs index 025b55386b..29b3a817b6 100644 --- a/module/core/former/tests/inc/former_tests/a_primitives_manual.rs +++ b/module/core/former/tests/inc/former_tests/a_primitives_manual.rs @@ -177,14 +177,10 @@ for Struct1FormerStorage // = former -pub struct Struct1Former -< - Definition = Struct1FormerDefinition, -> +pub struct Struct1Former< Definition = Struct1FormerDefinition > where Definition : former::FormerDefinition, Definition::Types : former::FormerDefinitionTypes< Storage = Struct1FormerStorage >, - // < Definition::Types as former::FormerDefinitionTypes >::Storage : former::StoragePreform, { storage : < Definition::Types as former::FormerDefinitionTypes >::Storage, context : core::option::Option< < Definition::Types as former::FormerDefinitionTypes >::Context >, @@ -195,7 +191,6 @@ impl< Definition > Struct1Former< Definition > where Definition : former::FormerDefinition, Definition::Types : former::FormerDefinitionTypes< Storage = Struct1FormerStorage >, - // < Definition::Types as former::FormerDefinitionTypes >::Storage : former::StoragePreform, { #[ inline( always ) ] diff --git a/module/core/former/tests/inc/former_tests/attribute_setter.rs b/module/core/former/tests/inc/former_tests/attribute_setter.rs index 14e852373e..c3111256cc 100644 --- a/module/core/former/tests/inc/former_tests/attribute_setter.rs +++ b/module/core/former/tests/inc/former_tests/attribute_setter.rs @@ -9,9 +9,15 @@ pub struct StructWithCustomSetters magic : String, } -impl< Context, End > StructWithCustomSettersFormer< Context, End > +// impl< Context, End > StructWithCustomSettersFormer< Context, End > +// where +// End: the_module::FormingEnd< StructWithCustomSetters, Context >, +// { + +impl< Definition > StructWithCustomSettersFormer< Definition > where - End: the_module::FormingEnd< StructWithCustomSetters, Context >, + Definition : former::FormerDefinition, + Definition::Types : former::FormerDefinitionTypes< Storage = StructWithCustomSettersFormerStorage >, { /// Custom alternative setter of ordinary field. diff --git a/module/core/former/tests/inc/former_tests/parametrized_struct_imm.rs b/module/core/former/tests/inc/former_tests/parametrized_struct_imm.rs index 7318cacb1f..40943ddd1f 100644 --- a/module/core/former/tests/inc/former_tests/parametrized_struct_imm.rs +++ b/module/core/former/tests/inc/former_tests/parametrized_struct_imm.rs @@ -26,7 +26,8 @@ impl< Name > Property< Name > pub struct Command< K : core::hash::Hash + std::cmp::Eq > { pub name : String, - #[ subformer( the_module::HashMapSubformer ) ] + // #[ subformer( the_module::HashMapSubformer ) ] + #[ subformer( former::HashMapDefinition ) ] pub properties : collection_tools::HashMap< K, Property< K > >, } diff --git a/module/core/former/tests/inc/former_tests/parametrized_struct_where.rs b/module/core/former/tests/inc/former_tests/parametrized_struct_where.rs index 7306f1b229..ba358b14f9 100644 --- a/module/core/former/tests/inc/former_tests/parametrized_struct_where.rs +++ b/module/core/former/tests/inc/former_tests/parametrized_struct_where.rs @@ -28,7 +28,8 @@ where K : core::hash::Hash + std::cmp::Eq, { pub name : String, - #[ subformer( the_module::HashMapSubformer ) ] + // #[ subformer( the_module::HashMapSubformer ) ] + #[ subformer( former::HashMapDefinition ) ] pub properties : collection_tools::HashMap< K, Property< K > >, } diff --git a/module/core/former/tests/inc/former_tests/subformer_basic.rs b/module/core/former/tests/inc/former_tests/subformer_basic.rs index bee9c75113..6d45926eba 100644 --- a/module/core/former/tests/inc/former_tests/subformer_basic.rs +++ b/module/core/former/tests/inc/former_tests/subformer_basic.rs @@ -53,7 +53,8 @@ where { pub name : String, pub subject : String, - #[ subformer( the_module::HashMapSubformer ) ] + // #[ subformer( the_module::HashMapSubformer ) ] + #[ subformer( former::HashMapDefinition ) ] pub properties : collection_tools::HashMap< K, Property< K > >, } diff --git a/module/core/former/tests/inc/former_tests/subformer_shortcut.rs b/module/core/former/tests/inc/former_tests/subformer_shortcut.rs index bf36125847..ecaa7c5223 100644 --- a/module/core/former/tests/inc/former_tests/subformer_shortcut.rs +++ b/module/core/former/tests/inc/former_tests/subformer_shortcut.rs @@ -4,7 +4,7 @@ use super::*; /// Parameter description. #[ derive( Debug, Default, PartialEq, the_module::Former ) ] -pub struct TemplateParameterDefinition +pub struct TemplateParameterDescriptor { descriptor : String, is_mandatory : bool, @@ -15,8 +15,9 @@ pub struct TemplateParameterDefinition pub struct TemplateParameters { // #[ debug = the_module::VectorSubformer, descriptor, descriptor( name ) ] - #[ subformer( the_module::VectorSubformer ) ] - descriptors : Vec< TemplateParameterDefinition >, + // #[ subformer( the_module::VectorSubformer ) ] + #[ subformer( former::VectorDefinition ) ] + descriptors : Vec< TemplateParameterDescriptor >, // #[ subformer_setter = the_module::VectorSubformer ] // pub fn descriptor( self, name : &str ) @@ -26,19 +27,35 @@ pub struct TemplateParameters } -impl< Context, End > former::FormerBegin< TemplateParameterDefinitionFormerStorage, TemplateParameterDefinition, Context > -for TemplateParameterDefinitionFormer< Context, End > +// impl< Definition > TemplateParametersFormer< Definition > +// where +// Definition : former::FormerDefinition, +// Definition::Types : former::FormerDefinitionTypes< Storage = TemplateParameterDescriptorFormerStorage >, +// { + +// impl< Context, End > former::FormerBegin< TemplateParameterDescriptorFormerStorage, TemplateParameterDescriptor, Context > +// for TemplateParameterDescriptorFormer< Context, End > +// where +// End : the_module::FormingEnd< TemplateParameterDescriptor, Context >, +impl< Definition > former::FormerBegin< Definition > +for TemplateParameterDescriptorFormer< Definition > where - End : the_module::FormingEnd< TemplateParameterDefinition, Context >, + Definition : former::FormerDefinition, + Definition::Types : former::FormerDefinitionTypes< Storage = TemplateParameterDescriptorFormerStorage >, + // End : the_module::FormingEnd< TemplateParameterDescriptor, Context >, { - type End = End; + + // type End = End; #[ inline( always ) ] fn _begin ( - storage : core::option::Option< TemplateParameterDefinitionFormerStorage >, - context : core::option::Option< Context >, - on_end : End, + // storage : core::option::Option< TemplateParameterDescriptorFormerStorage >, + // context : core::option::Option< Context >, + // on_end : End, + storage : core::option::Option< < Definition::Types as former::FormerDefinitionTypes >::Storage >, + context : core::option::Option< < Definition::Types as former::FormerDefinitionTypes >::Context >, + on_end : Definition::End, ) -> Self { debug_assert!( storage.is_none() ); @@ -47,68 +64,100 @@ where } -impl< Context, End > TemplateParametersFormer< Context, End > +// impl< Context, End > TemplateParametersFormer< Context, End > +// where +// End : former::FormingEnd< TemplateParameters, Context >, +impl< Definition > TemplateParametersFormer< Definition > where - End : former::FormingEnd< TemplateParameters, Context >, + // End : former::FormingEnd< TemplateParameters, Context >, + Definition : former::FormerDefinition, + Definition::Types : former::FormerDefinitionTypes< Storage = TemplateParametersFormerStorage >, { + // pub trait FormerDefinitionTypes : Sized + // { + // type Storage : Default; + // type Formed; + // type Context; + // } + #[ inline( always ) ] - pub fn descriptor3< Former2 >( self ) -> + pub fn descriptor3< Former2, Definition2, End >( self ) -> Former2 where - Former2 : former::FormerBegin - < - TemplateParameterDefinitionFormerStorage, - TemplateParameterDefinition, - Self, - End = former::FormingEndClosure< TemplateParameterDefinition, Self >, - >, - // FieldContainer : ContainerAdd, - { - let on_end = | descriptor : TemplateParameterDefinition, super_former : core::option::Option< Self > | -> Self - { - let mut super_former = super_former.unwrap(); - if super_former.storage.descriptors.is_none() - { - super_former.storage.descriptors = Some( Default::default() ); - } - if let Some( ref mut descriptors ) = super_former.storage.descriptors - { - former::ContainerAdd::add( descriptors, descriptor ); - } - super_former - }; - Former2::_begin( None, Some( self ), former::FormingEndClosure::new( on_end ) ) - } + // Definition2 : former::FormerDefinition< End = former::FormingEndClosure< Definition2::Types > >, + Definition2 : former::FormerDefinition, + Definition2::End : former::FormingEnd< Definition2::Types >, + + // Definition2 : former::FormerDefinition< Types = Former2::Types, End = End >, + // Former2 : former::FormerBegin< Definition2 >, + // End : former::FormingEnd< Former2::Types >, + +// xxx : uncomment +// Definition2::Types : former::FormerDefinitionTypes +// < +// Storage = TemplateParameterDescriptorFormerStorage, +// Formed = TemplateParameterDescriptor, +// Context = Self, +// >, +// Former2 : former::FormerBegin +// < +// Definition2, +// // TemplateParameterDescriptorFormerStorage, +// // TemplateParameterDescriptor, +// // Self, +// // End = former::FormingEndClosure< TemplateParameterDescriptor, Self >, +// >, +// // FieldContainer : ContainerAdd, +// { +// +// let on_end = | descriptor : TemplateParameterDescriptor, super_former : core::option::Option< Self > | -> Self +// { +// let mut super_former = super_former.unwrap(); +// if super_former.storage.descriptors.is_none() +// { +// super_former.storage.descriptors = Some( Default::default() ); +// } +// if let Some( ref mut descriptors ) = super_former.storage.descriptors +// { +// former::ContainerAdd::add( descriptors, descriptor ); +// } +// super_former +// }; +// Former2::_begin( None, Some( self ), former::FormingEndClosure::new( on_end ) ) +// } // xxx2 : move to a trait and make easier to use subformer, trait with generic interface of a container should help - #[ inline( always ) ] - pub fn descriptor( self, name : &str ) -> - TemplateParameterDefinitionFormer< Self, impl former::FormingEnd< TemplateParameterDefinition, Self > > - { - self.descriptor3::< TemplateParameterDefinitionFormer< _, _ > >().descriptor( name ) - } +// xxx : uncomment + // #[ inline( always ) ] + // pub fn descriptor( self, name : &str ) -> + // // TemplateParameterDescriptorFormer< Self, impl former::FormingEnd< TemplateParameterDescriptor, Self > > + // TemplateParameterDescriptorFormer< Definition > + // { + // self.descriptor3::< TemplateParameterDescriptorFormer< _ > >().descriptor( name ) + // } } -#[ test ] -fn basic() -{ - - let got = TemplateParameters::former() - .descriptors() - .push( TemplateParameterDefinition::former().descriptor( "a" ).form() ) - .push( TemplateParameterDefinition::former().descriptor( "b" ).form() ) - .end() - .form(); - - let descriptors = vec! - [ - TemplateParameterDefinition { descriptor : "a".to_string(), is_mandatory : false }, - TemplateParameterDefinition { descriptor : "b".to_string(), is_mandatory : false }, - ]; - let exp = TemplateParameters { descriptors }; - a_id!( got, exp ); - -} +// xxx : uncomment +// #[ test ] +// fn basic() +// { +// +// let got = TemplateParameters::former() +// .descriptors() +// .push( TemplateParameterDescriptor::former().descriptor( "a" ).form() ) +// .push( TemplateParameterDescriptor::former().descriptor( "b" ).form() ) +// .end() +// .form(); +// +// let descriptors = vec! +// [ +// TemplateParameterDescriptor { descriptor : "a".to_string(), is_mandatory : false }, +// TemplateParameterDescriptor { descriptor : "b".to_string(), is_mandatory : false }, +// ]; +// let exp = TemplateParameters { descriptors }; +// a_id!( got, exp ); +// +// } diff --git a/module/core/former/tests/inc/mod.rs b/module/core/former/tests/inc/mod.rs index 08d122dc6e..84c9262f3e 100644 --- a/module/core/former/tests/inc/mod.rs +++ b/module/core/former/tests/inc/mod.rs @@ -28,7 +28,7 @@ mod former_tests mod attribute_default_container; mod attribute_default_primitive; // mod attribute_perform; - // mod attribute_setter; + mod attribute_setter; mod attribute_alias; // mod string_slice_manual; @@ -56,9 +56,9 @@ mod former_tests // mod subformer_basic_manual; // #[ cfg( any( not( feature = "no_std" ), feature = "use_alloc" ) ) ] // mod subformer_basic; -// -// #[ cfg( any( not( feature = "no_std" ) ) ) ] -// mod subformer_shortcut; + + #[ cfg( any( not( feature = "no_std" ) ) ) ] + mod subformer_shortcut; // xxx : uncomment diff --git a/module/core/former_meta/src/derive/former.rs b/module/core/former_meta/src/derive/former.rs index 9f9957cbb1..528d0e8d80 100644 --- a/module/core/former_meta/src/derive/former.rs +++ b/module/core/former_meta/src/derive/former.rs @@ -1493,7 +1493,7 @@ pub fn former( input : proc_macro::TokenStream ) -> Result< TokenStream > diag::debug_report_print( "derive : Former", original_input, &result ); } - // zzz : implement hints + // zzz : implement hints, rewrite if example_of_custom_setter { let _example = diff --git a/module/core/former_meta/src/lib.rs b/module/core/former_meta/src/lib.rs index e02c582eaf..b585a95113 100644 --- a/module/core/former_meta/src/lib.rs +++ b/module/core/former_meta/src/lib.rs @@ -140,6 +140,7 @@ mod derive /// > /// where /// End : former::FormingEnd< UserProfile, Context >, +/// // zzz : update /// { /// storage : UserProfileFormerStorage, /// context : Option< Context >,