From 70f6390f27ead0a1dce0395939ac129ff0601e56 Mon Sep 17 00:00:00 2001 From: wandalen Date: Sat, 23 Mar 2024 12:28:50 +0200 Subject: [PATCH] former : experimenting --- module/core/former/src/axiomatic3.rs | 8 ++-- module/core/former/src/hash_map.rs | 9 +++- module/core/former/src/hash_set.rs | 9 +++- module/core/former/src/vector3.rs | 5 ++- .../inc/former_tests/a_primitives_manual.rs | 13 +++--- .../inc/former_tests/only_test/primitives.rs | 45 ++++++++++++++++--- module/core/former/tests/inc/mod.rs | 4 +- 7 files changed, 70 insertions(+), 23 deletions(-) diff --git a/module/core/former/src/axiomatic3.rs b/module/core/former/src/axiomatic3.rs index b618c9e289..c1132e8599 100644 --- a/module/core/former/src/axiomatic3.rs +++ b/module/core/former/src/axiomatic3.rs @@ -3,14 +3,15 @@ /// xxx pub trait StoragePerform : ::core::default::Default { - type Formed; - fn preform( self ) -> Self::Formed; + // type FormedResult; + type Descriptor : FormerDescriptor< Storage = Self >; + fn preform( self ) -> < < Self as StoragePerform >::Descriptor as FormerDescriptor >::Formed; } /// xxx pub trait FormerDescriptor { - type Storage : StoragePerform< Formed = Self::Formed >; + type Storage : StoragePerform< Descriptor = Self >; type Formed; // type Former; } @@ -176,7 +177,6 @@ for FormingEndWrapper< Former, Context > /// sophisticated and flexible construction patterns conducive to complex data transformations or object creation /// sequences within builder patterns. -// xxx : change sequence pub trait FormerBegin< Former : FormerDescriptor, Context > { diff --git a/module/core/former/src/hash_map.rs b/module/core/former/src/hash_map.rs index 7837743d90..169c9baa19 100644 --- a/module/core/former/src/hash_map.rs +++ b/module/core/former/src/hash_map.rs @@ -70,8 +70,13 @@ for HashMap< K, E > where K : ::core::cmp::Eq + ::core::hash::Hash, { - type Formed = Self; - fn preform( self ) -> Self::Formed + // type Formed = Self; + // fn preform( self ) -> Self::Formed + // { + // self + // } + type Descriptor = HashMapDescriptor< K, E >; + fn preform( self ) -> < < Self as StoragePerform >::Descriptor as FormerDescriptor >::Formed { self } diff --git a/module/core/former/src/hash_set.rs b/module/core/former/src/hash_set.rs index 3b662e7f25..a2ac818a72 100644 --- a/module/core/former/src/hash_set.rs +++ b/module/core/former/src/hash_set.rs @@ -58,11 +58,16 @@ for HashSet< K > where K : ::core::cmp::Eq + ::core::hash::Hash, { - type Formed = Self; - fn preform( self ) -> Self::Formed + type Descriptor = HashSetDescriptor< K >; + fn preform( self ) -> < < Self as StoragePerform >::Descriptor as FormerDescriptor >::Formed { self } + // type Formed = Self; + // fn preform( self ) -> Self::Formed + // { + // self + // } } impl< K > FormerDescriptor diff --git a/module/core/former/src/vector3.rs b/module/core/former/src/vector3.rs index b7fa2ccee5..4fa91ea0a9 100644 --- a/module/core/former/src/vector3.rs +++ b/module/core/former/src/vector3.rs @@ -47,8 +47,9 @@ for VectorDescriptor< E > impl< E > StoragePerform for Vec< E > { - type Formed = Self; - fn preform( self ) -> Self::Formed + // type Formed = Self; + type Descriptor = VectorDescriptor< E >; + fn preform( self ) -> < < Self as StoragePerform >::Descriptor as FormerDescriptor >::Formed { self } 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 6feb243a4b..cfb72c929f 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 @@ -15,7 +15,6 @@ pub struct Struct1 // generated by former impl Struct1 { - // xxx : make sure it's covered by tests pub fn former() -> Struct1Former< (), the_module::ReturnStorage > { Struct1Former::new() @@ -71,9 +70,10 @@ for Struct1FormerDescriptor impl former::StoragePerform for Struct1FormerStorage { - type Formed = Struct1; + // type Formed = Struct1; + type Descriptor = Struct1FormerDescriptor; - fn preform( mut self ) -> Self::Formed + fn preform( mut self ) -> < < Self as former::StoragePerform >::Descriptor as former::FormerDescriptor >::Formed { let int_1 = if self.int_1.is_some() @@ -114,7 +114,9 @@ for Struct1FormerStorage None }; - Self::Formed + // < Self::Descriptor as former::FormerDescriptor >::Formed + // < < Self as former::StoragePerform >::Descriptor as former::FormerDescriptor >::Formed + Struct1 { int_1, string_1, @@ -147,9 +149,10 @@ where { // xxx : test that method exists - fn preform( mut self ) -> < Struct1FormerDescriptor as former::FormerDescriptor >::Formed + fn preform( self ) -> < Struct1FormerDescriptor as former::FormerDescriptor >::Formed { + // xxx : test that method exists former::StoragePerform::preform( self.storage ) // let int_1 = if self.storage.int_1.is_some() diff --git a/module/core/former/tests/inc/former_tests/only_test/primitives.rs b/module/core/former/tests/inc/former_tests/only_test/primitives.rs index 35bd57ad36..09a40260f7 100644 --- a/module/core/former/tests/inc/former_tests/only_test/primitives.rs +++ b/module/core/former/tests/inc/former_tests/only_test/primitives.rs @@ -11,12 +11,6 @@ tests_impls! fn internals() { - // // test.case( "vector : construction" ); - // int_1, - // string_1, - // int_optional_1, - // string_optional_1, - let former = Struct1::former(); a_id!( former.storage.int_1, None ); a_id!( former.storage.string_1, None ); @@ -47,6 +41,43 @@ tests_impls! } + // + + fn preform() + { + + // formation should have method preform + let got = Struct1::former().preform(); + let exp = Struct1::former().form(); + a_id!( got, exp ); + + // storage should have method preform + let got = the_module::StoragePerform::preform( Struct1::former().storage ); + let exp = Struct1::former().form(); + a_id!( got, exp ); + + // storage should have method preform + use the_module::StoragePerform; + let got = Struct1::former().storage.preform(); + let exp = Struct1::former().form(); + a_id!( got, exp ); + + } + + // + + fn descriptor() + { + + // descriptor exists + let got = < Struct1FormerDescriptor as the_module::FormerDescriptor >::Formed::former().form(); + let exp = Struct1::former().form(); + a_id!( got, exp ); + + } + + // + fn test_int() { @@ -229,6 +260,8 @@ tests_impls! tests_index! { internals, + preform, + descriptor, test_int, test_string, test_optional_string, diff --git a/module/core/former/tests/inc/mod.rs b/module/core/former/tests/inc/mod.rs index 6484e5c881..8c608b2d62 100644 --- a/module/core/former/tests/inc/mod.rs +++ b/module/core/former/tests/inc/mod.rs @@ -102,7 +102,7 @@ only_for_terminal_module! { println!( "current_dir : {:?}", std::env::current_dir().unwrap() ); - let t = test_tools::compiletime::TestCases::new(); + // let t = test_tools::compiletime::TestCases::new(); // xxx // t.compile_fail( "tests/inc/compiletime/former_bad_attr.rs" ); @@ -119,7 +119,7 @@ only_for_terminal_module! { println!( "current_dir : {:?}", std::env::current_dir().unwrap() ); - let t = test_tools::compiletime::TestCases::new(); + let _t = test_tools::compiletime::TestCases::new(); //t.compile_fail( "tests/inc/compiletime/components_component_from_debug.rs" );