From 6655ef8199be9a5aa08b03d6aebe8ce8173c777f Mon Sep 17 00:00:00 2001 From: wandalen Date: Thu, 21 Mar 2024 15:43:37 +0200 Subject: [PATCH] former : making subforming more friendly --- .../a_containers_with_runtime_manual.rs | 58 ++++++++++++++----- .../inc/former_tests/subformer_shortcut.rs | 1 - module/core/former_meta/src/derive/former.rs | 23 -------- 3 files changed, 45 insertions(+), 37 deletions(-) diff --git a/module/core/former/tests/inc/former_tests/a_containers_with_runtime_manual.rs b/module/core/former/tests/inc/former_tests/a_containers_with_runtime_manual.rs index 36377e0524..fac9782a88 100644 --- a/module/core/former/tests/inc/former_tests/a_containers_with_runtime_manual.rs +++ b/module/core/former/tests/inc/former_tests/a_containers_with_runtime_manual.rs @@ -22,9 +22,9 @@ impl Struct1 // generated by former pub struct Struct1FormerStorage { - pub vec_1 : core::option::Option< Vec< String > >, - pub hashmap_strings_1 : core::option::Option< std::collections::HashMap< String, String > >, - pub hashset_strings_1 : core::option::Option< std::collections::HashSet< String > >, + pub vec_1 : ::core::option::Option< Vec< String > >, + pub hashmap_strings_1 : ::core::option::Option< std::collections::HashMap< String, String > >, + pub hashset_strings_1 : ::core::option::Option< std::collections::HashSet< String > >, } impl Default for Struct1FormerStorage @@ -54,8 +54,8 @@ where FormerEnd : the_module::FormingEnd< Struct1, FormerContext >, { storage : Struct1FormerStorage, - context : core::option::Option< FormerContext >, - on_end : core::option::Option< FormerEnd >, + context : ::core::option::Option< FormerContext >, + on_end : ::core::option::Option< FormerEnd >, } impl< FormerContext, FormerEnd > Struct1Former< FormerContext, FormerEnd > @@ -126,14 +126,19 @@ where #[ inline( always ) ] pub fn begin ( - context : core::option::Option< FormerContext >, + mut storage : ::core::option::Option< Struct1FormerStorage >, + context : ::core::option::Option< FormerContext >, on_end : FormerEnd, ) -> Self { + if storage.is_none() + { + storage = Some( Default::default() ); + } Self { - storage : core::default::Default::default(), - context : context, + storage : storage.unwrap(), + context, on_end : ::core::option::Option::Some( on_end ), } } @@ -153,7 +158,7 @@ where where Former2 : former::FormerBegin< Vec< String >, Self, End = former::FormingEndWrapper< Vec< String >, Self > >, { - let on_end = | formed : Vec< String >, super_former : core::option::Option< Self > | -> Self + let on_end = | formed : Vec< String >, super_former : ::core::option::Option< Self > | -> Self { let mut super_former = super_former.unwrap(); if let Some( ref mut field ) = super_former.storage.vec_1 @@ -190,7 +195,7 @@ where // > // { // let formed = self.storage.vec_1.take(); - // let on_end = | formed : Vec< String >, super_former : core::option::Option< Self > | -> Self + // let on_end = | formed : Vec< String >, super_former : ::core::option::Option< Self > | -> Self // { // let mut super_former = super_former.unwrap(); // super_former.storage.vec_1 = Some( formed ); @@ -209,7 +214,7 @@ where > { let formed = self.storage.hashmap_strings_1.take(); - let on_end = | formed : std::collections::HashMap< String, String >, super_former : core::option::Option< Self > | -> Self + let on_end = | formed : std::collections::HashMap< String, String >, super_former : ::core::option::Option< Self > | -> Self { let mut super_former = super_former.unwrap(); super_former.storage.hashmap_strings_1 = Some( formed ); @@ -227,7 +232,7 @@ where > { let formed = self.storage.hashset_strings_1.take(); - let on_end = | formed : std::collections::HashSet< String >, super_former : core::option::Option< Self > | -> Self + let on_end = | formed : std::collections::HashSet< String >, super_former : ::core::option::Option< Self > | -> Self { let mut super_former = super_former.unwrap(); super_former.storage.hashset_strings_1 = Some( formed ); @@ -248,11 +253,38 @@ impl Struct1Former< Struct1, the_module::ReturnFormed > #[ inline( always ) ] pub fn new() -> Self { - Self::begin(None, the_module::ReturnFormed) + Self::begin( None, None, the_module::ReturnFormed ) } } // +// impl< FormerContext, FormerEnd > Struct1Former< FormerContext, FormerEnd > +// where +// FormerEnd : the_module::FormingEnd< Struct1, FormerContext >, + +// impl< FormerContext, FormerEnd > former::FormerBegin< Struct1, FormerContext > +// for Struct1Former< FormerContext, FormerEnd > +// where +// End : the_module::FormingEnd< Struct1, FormerContext >, +// { +// type End = End; +// +// #[ inline( always ) ] +// fn _begin +// ( +// storage : core::option::Option< Struct1FormerStorage >, /* xxx2 : that should be storage */ +// context : core::option::Option< FormerContext >, +// on_end : End, +// ) -> Self +// { +// debug_assert!( storage.is_none() ); +// Self::begin( None, context, on_end ) +// } +// +// } + +// + include!( "../only_test/containers_with_runtime.rs" ); 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 33f4d58ca6..0b73af03b9 100644 --- a/module/core/former/tests/inc/former_tests/subformer_shortcut.rs +++ b/module/core/former/tests/inc/former_tests/subformer_shortcut.rs @@ -26,7 +26,6 @@ pub struct TemplateParameters } - impl< Context, End > former::FormerBegin< TemplateParameterDescriptor, Context > for TemplateParameterDescriptorFormer< Context, End > where diff --git a/module/core/former_meta/src/derive/former.rs b/module/core/former_meta/src/derive/former.rs index 6d03b9654c..3e60e046e3 100644 --- a/module/core/former_meta/src/derive/former.rs +++ b/module/core/former_meta/src/derive/former.rs @@ -1037,29 +1037,8 @@ pub fn former( input : proc_macro::TokenStream ) -> Result< TokenStream > #fields_setter )* - // /// - // /// Construct new instance of former with default parameters. - // /// - // #[ inline( always ) ] - // pub fn new_() -> #former_name_ident < #generics_params #name_ident #generics_ty, former::ReturnFormed > - // { - // #former_name_ident :: < #generics_params #name_ident #generics_ty, former::ReturnFormed > :: begin - // ( - // None, - // former::ReturnFormed, - // ) - // } - // // xxx : should be stand-alone. look VectorSubformer - } - // pub struct #former_storage_name_ident #generics_ty - // #generics_where - // let ( generics_impl, generics_ty, generics_where ) = generics.split_for_impl(); - - // impl #generics_of_former_impl #former_name_ident #generics_of_former_ty - // #generics_of_former_where - #[ automatically_derived ] impl #generics_impl #former_name_ident < #generics_params #name_ident #generics_ty, former::ReturnFormed > #generics_where @@ -1069,7 +1048,6 @@ pub fn former( input : proc_macro::TokenStream ) -> Result< TokenStream > /// Construct new instance of former with default parameters. /// #[ inline( always ) ] - // pub fn new() -> #former_name_ident < #generics_params #name_ident #generics_ty, former::ReturnFormed > pub fn new() -> Self { // #former_name_ident :: < #generics_params #name_ident #generics_ty, former::ReturnFormed > :: begin @@ -1080,7 +1058,6 @@ pub fn former( input : proc_macro::TokenStream ) -> Result< TokenStream > former::ReturnFormed, ) } - // xxx : should be stand-alone. look VectorSubformer }