Skip to content

Commit

Permalink
former : experimenting
Browse files Browse the repository at this point in the history
  • Loading branch information
Wandalen committed Apr 27, 2024
1 parent d4d4b64 commit ec837ae
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,8 @@ where
#[ inline( always ) ]
pub fn vec_1_set< Former2 >( self ) -> Former2
where
Former2 : former::FormerBegin< former::VectorDefinition< String, Self, Self, Struct1FormerAssignVec1End, > >,
// Former2 : former::FormerBegin< < Vec< String > as former::EntityToDefinition< Self, Self, Struct1FormerAssignVec1End > >::Definition >,
// Former2 : former::FormerBegin< former::VectorDefinition< String, Self, Self, Struct1FormerAssignVec1End, > >,
Former2 : former::FormerBegin< < Vec< String > as former::EntityToDefinition< Self, Self, Struct1FormerAssignVec1End > >::Definition >,
{
Former2::former_begin( None, Some( self ), Struct1FormerAssignVec1End )
}
Expand Down
55 changes: 31 additions & 24 deletions module/core/former_meta/src/derive/former.rs
Original file line number Diff line number Diff line change
Expand Up @@ -753,26 +753,39 @@ fn container_setter
let non_optional_ty = &field.non_optional_ty;
let params = typ::type_parameters( &non_optional_ty, .. );

// example : `former::VectorDefinition`
let mut subformer_definition = &field.attrs.container.as_ref().unwrap().expr;

// xxx
// if subformer_definition.is_none()
// {
// let extra : syn::Type = parse_quote!
// // let code = qt!
// {
//
// }
// subformer_definition = Some( code );
// }

use convert_case::{ Case, Casing };
let former_assign_end_name = format!( "{}FormerAssign{}End", stru, field_ident.to_string().to_case( Case::Pascal ) );
let former_assign_end = syn::Ident::new( &former_assign_end_name, field_ident.span() );
let field_assign_name = format!( "_{}_assign", field_ident );
let field_assign = syn::Ident::new( &field_assign_name, field_ident.span() );

// example : `former::VectorDefinition`
let subformer_definition = &field.attrs.container.as_ref().unwrap().expr;

// xxx
let subformer_definition = if subformer_definition.is_some()
{
qt!
{
#subformer_definition
<
#( #params, )*
Self,
Self,
#former_assign_end,
>
}
// former::VectorDefinition< String, Self, Self, Struct1FormerAssignVec1End, >
}
else
{
qt!
{
< #non_optional_ty as former::EntityToDefinition< Self, Self, #former_assign_end > >::Definition
}
// < Vec< String > as former::EntityToDefinition< Self, Self, Struct1FormerAssignVec1End > >::Definition
};

let doc = format!
(
"Subformer setter for the '{}' field. Method {} unlike method {} accept custom container subformer.",
Expand All @@ -791,12 +804,6 @@ fn container_setter
Former2 : former::FormerBegin
<
#subformer_definition
<
#( #params, )*
Self,
Self,
#former_assign_end,
>
>,
{
Former2::former_begin( None, Some( self ), #former_assign_end )
Expand All @@ -813,12 +820,12 @@ fn container_setter
pub fn #field_ident( self ) ->
former::ContainerSubformer::
<
( #( #params, )* ), #subformer_definition< #( #params, )* Self, Self, #former_assign_end >
( #( #params, )* ), #subformer_definition
>
{
self.#field_assign::< former::ContainerSubformer::
<
( #( #params, )* ), #subformer_definition< #( #params, )* Self, Self, #former_assign_end >
( #( #params, )* ), #subformer_definition
>>()
}

Expand All @@ -834,12 +841,12 @@ fn container_setter
pub fn #field_ident( self ) ->
former::ContainerSubformer::
<
#( #params, )* #subformer_definition< #( #params, )* Self, Self, #former_assign_end >
#( #params, )* #subformer_definition
>
{
self.#field_assign::< former::ContainerSubformer::
<
#( #params, )* #subformer_definition< #( #params, )* Self, Self, #former_assign_end >
#( #params, )* #subformer_definition
>>()
}

Expand Down

0 comments on commit ec837ae

Please sign in to comment.