From 7511be8e318619bb40ce31bc15859cfbe7248c64 Mon Sep 17 00:00:00 2001 From: wandalen Date: Sat, 13 Apr 2024 08:42:34 +0300 Subject: [PATCH] former : experimenting --- .../inc/former_tests/subformer_shortcut.rs | 97 ++++++++++--------- 1 file changed, 53 insertions(+), 44 deletions(-) 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 25b59244ec..f03c0cd2e8 100644 --- a/module/core/former/tests/inc/former_tests/subformer_shortcut.rs +++ b/module/core/former/tests/inc/former_tests/subformer_shortcut.rs @@ -82,50 +82,59 @@ where // } // xxx : uncomment -// #[ inline( always ) ] -// pub fn descriptor3< Former2, Definition2, End >( self ) -> -// Former2 -// where -// // 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 >, -// -// 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 ) ) -// } + #[ inline( always ) ] + pub fn descriptor3< Former2, Definition2, Types2, End >( self ) -> + Former2 + where + Types2 : former::FormerDefinitionTypes + < + Storage = TemplateParameterDescriptor, + Formed = Self, + Context = Self, + >, + // Definition2 : former::FormerDefinition< End = former::FormingEndClosure< Definition2::Types > >, + Definition2 : former::FormerDefinition< End = former::FormingEndClosure< Types2 >, Types = Types2 >, + // Definition2 : former::FormerDefinition< End = End >, + 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 >, + + // 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