Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AUTO : Forward from derives_refactoring_2 to alpha #1378

Merged
merged 4 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion module/core/clone_dyn/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ The main function demonstrates the overall usage by creating a vector, obtaining
T : 'a,
Self : Iterator< Item = T > + ExactSizeIterator< Item = T > + DoubleEndedIterator,
// Self : CloneDyn,
// no need to explicitly to define this bound, because macro will do it for you anyway
// There’s no need to explicitly define this bound because the macro will handle it for you.
{
}

Expand Down Expand Up @@ -141,6 +141,7 @@ The main function demonstrates the overall usage by creating a vector, obtaining
// Nevertheless, thanks to CloneDyn, the object is clonable.
//
// This line demonstrates cloning the iterator and iterating over the cloned iterator.
// Without `CloneDyn`, you would need to collect the iterator into a container, allocating memory on the heap.
iter.clone().for_each( | e | println!( "{e}" ) );

// Iterate over the original iterator and print each element.
Expand Down
3 changes: 2 additions & 1 deletion module/core/clone_dyn/examples/clone_dyn_trivial.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ fn main()
T : 'a,
Self : Iterator< Item = T > + ExactSizeIterator< Item = T > + DoubleEndedIterator,
// Self : CloneDyn,
// no need to explicitly to define this bound, because macro will do it for you anyway
// There’s no need to explicitly define this bound because the macro will handle it for you.
{
}

Expand Down Expand Up @@ -126,6 +126,7 @@ fn main()
// Nevertheless, thanks to CloneDyn, the object is clonable.
//
// This line demonstrates cloning the iterator and iterating over the cloned iterator.
// Without `CloneDyn`, you would need to collect the iterator into a container, allocating memory on the heap.
iter.clone().for_each( | e | println!( "{e}" ) );

// Iterate over the original iterator and print each element.
Expand Down
1 change: 0 additions & 1 deletion module/core/clone_dyn/tests/inc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,3 @@ use super::*;
mod basic_manual;
mod basic;
mod parametrized;

1 change: 1 addition & 0 deletions module/core/clone_dyn_types/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ fn main()
// Nevertheless, thanks to CloneDyn, the object is clonable.
//
// This line demonstrates cloning the iterator and iterating over the cloned iterator.
// Without `CloneDyn`, you would need to collect the iterator into a container, allocating memory on the heap.
iter.clone().for_each( | e | println!( "{e}" ) );

// Iterate over the original iterator and print each element.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ fn main()
// Nevertheless, thanks to CloneDyn, the object is clonable.
//
// This line demonstrates cloning the iterator and iterating over the cloned iterator.
// Without `CloneDyn`, you would need to collect the iterator into a container, allocating memory on the heap.
iter.clone().for_each( | e | println!( "{e}" ) );

// Iterate over the original iterator and print each element.
Expand Down
1 change: 0 additions & 1 deletion module/core/clone_dyn_types/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,6 @@ pub mod prelude
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
#[ cfg( any( not( feature = "no_std" ), feature = "use_alloc" ) ) ]
pub use super::private::
{
CloneDyn,
Expand Down
2 changes: 1 addition & 1 deletion module/core/derive_tools/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ parse-display = { version = "~0.8.2", optional = true, default-features = false
## internal
derive_tools_meta = { workspace = true, features = [] }
variadic_from = { workspace = true, features = [] }
clone_dyn = { workspace = true, features = [] }
clone_dyn = { workspace = true, features = [ "clone_dyn_types", "clone_dyn_meta" ] }


[dev-dependencies]
Expand Down
5 changes: 5 additions & 0 deletions module/core/derive_tools/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,11 @@ pub mod exposed
#[ allow( unused_imports ) ]
pub use ::clone_dyn::exposed::*;

#[ cfg( feature = "derive_clone_dyn" ) ]
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use ::clone_dyn;

// #[ doc( inline ) ]
// #[ allow( unused_imports ) ]
// pub use super::wtools::exposed::*;
Expand Down
10 changes: 8 additions & 2 deletions module/core/derive_tools/tests/inc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@ use super::*;
// = import tests of clone_dyn

#[ cfg( feature = "derive_clone_dyn" ) ]
#[ path = "../../../../core/clone_dyn/tests/inc/mod.rs" ]
mod clone_dyn_test;
mod clone_dyn_test
{
use super::*;

#[ path = "../../../../../core/clone_dyn/tests/inc/mod.rs" ]
mod clone_dyn_test;

}

// = import tests of variadic_from

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::*;

#[ derive( Debug, PartialEq, Eq, the_module::New ) ]
#[ debug ]
// #[ debug ]
struct StructNamedFields
{
a : i32,
Expand Down
2 changes: 1 addition & 1 deletion module/core/derive_tools_meta/src/derive/from.rs
Original file line number Diff line number Diff line change
Expand Up @@ -541,4 +541,4 @@ field : {variant_name}"#,
}
)

}
}
2 changes: 2 additions & 0 deletions module/core/format_tools/src/format/wrapper/aref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
//! It's often necessary to wrap something inot a local structure and this file contains a resusable local structure for wrapping.
//!

// xxx : make command to autogenerate it, maybe

// use core::fmt;
use core::ops::{ Deref };

Expand Down
1 change: 0 additions & 1 deletion module/core/macro_tools/examples/macro_tools_attr_prop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ fn main()

use macro_tools::
{
attr,
syn_err,
return_syn_err,
qt,
Expand Down
8 changes: 7 additions & 1 deletion module/core/macro_tools/src/generic_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,13 @@ pub( crate ) mod private
/// ]);
/// ```

pub fn names< 'a >( generics : &'a syn::Generics ) -> impl IterTrait< 'a, &'a syn::Ident > + Clone
pub fn names< 'a >( generics : &'a syn::Generics )
-> impl IterTrait< 'a, &'a syn::Ident >
// -> std::iter::Map
// <
// syn::punctuated::Iter< 'a, syn::GenericParam >,
// impl FnMut( &'a syn::GenericParam ) -> &'a syn::Ident + 'a,
// >
{
generics.params.iter().map( | param | match param
{
Expand Down
17 changes: 9 additions & 8 deletions module/core/macro_tools/src/item_struct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,26 @@ pub( crate ) mod private
use crate::*;

/// Extracts the types of each field into a vector.
pub fn field_types< 'a >( t : &'a syn::ItemStruct ) -> impl IterTrait< 'a, &'a syn::Type > + Clone
pub fn field_types< 'a >( t : &'a syn::ItemStruct )
-> impl IterTrait< 'a, &'a syn::Type >
// -> std::iter::Map
// <
// syn::punctuated::Iter< 'a, syn::Field >,
// impl FnMut( &'a syn::Field ) -> &'a syn::Type + 'a,
// >
{
t.fields.iter().map( | field | &field.ty )
}

/// Retrieves the names of each field, if they exist.
// pub fn field_names< 'a >( t : &'a syn::ItemStruct ) -> Option< impl IterTrait< 'a, &'a syn::Ident > >
pub fn field_names< 'a >( t : &'a syn::ItemStruct ) -> Option< BoxedIter< 'a, &'a syn::Ident > >
// xxx
{
let result : Option< BoxedIter< 'a, &'a syn::Ident > > = match &t.fields
match &t.fields
{
syn::Fields::Named( fields ) => Some( Box::new( fields.named.iter().map( | field | field.ident.as_ref().unwrap() ) ) ),
syn::Fields::Unit => Some( Box::new( core::iter::empty() ) ),
// syn::Fields::Named( fields ) => Some( DynIter::new( fields.named.iter().map( | field | field.ident.as_ref().unwrap() ) ) ),
// syn::Fields::Unit => Some( DynIter::new( core::iter::empty() ) ),
_ => None,
};
return result;
}
}

/// Retrieves the type of the first field of the struct.
Expand Down
142 changes: 1 addition & 141 deletions module/core/macro_tools/src/iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub( crate ) mod private
///
/// # Example
/// ```rust
/// use assistant::_IterTrait;
/// use macro_tools::_IterTrait;
///
/// // Example struct that implements Iterator, ExactSizeIterator, DoubleEndedIterator, and CloneDyn.
/// #[ derive( Clone ) ]
Expand Down Expand Up @@ -57,7 +57,6 @@ pub( crate ) mod private
/// }
/// }
///
/// impl _IterTrait< '_, i32 > for MyIterator {}
/// ```
pub trait _IterTrait< 'a, T >
where
Expand Down Expand Up @@ -122,19 +121,6 @@ pub( crate ) mod private
///
/// Prefer `BoxedIter` over `impl _IterTrait` when using trait objects ( `dyn _IterTrait` ) because the concrete type in return is less restrictive than `impl _IterTrait`.
///
/// # Example
/// ```rust
/// use assistant::{ _IterTrait, BoxedIter };
///
/// // Example function that returns a BoxedIter.
/// fn example_iterator() -> BoxedIter< 'static, i32 >
/// {
/// Box::new( MyIterator
/// {
/// // initialize fields
/// })
/// }
/// ```
pub type BoxedIter< 'a, T > = Box< dyn _IterTrait< 'a, T > + 'a >;

/// Trait that encapsulates a clonable iterator with specific characteristics, tailored for use with the `syn` crate.
Expand All @@ -160,128 +146,6 @@ pub( crate ) mod private
{
}

// xxx : qqq : make command to autogenerate it
// /// Wrapper around a boxed iterator that implements `_IterTrait`.
// ///
// /// The `DynIter` struct provides a way to work with trait objects that implement the `_IterTrait` trait. It acts as a
// /// wrapper around a boxed iterator and provides methods to interact with the iterator in a type-safe manner.
// ///
// /// # Examples
// ///
// /// ```rust
// /// use crate::DynIter;
// /// use std::vec::Vec;
// ///
// /// let v = vec![ 1, 2, 3 ];
// /// let iter = DynIter::new( v.iter() );
// /// for val in iter
// /// {
// /// println!( "{}", val );
// /// }
// /// ```
// pub struct DynIter< 'a, T >( Box< dyn _IterTrait< 'a, & 'a T > + 'a > );
//
// impl< 'a, T > fmt::Debug for DynIter< 'a, T >
// {
// fn fmt( &self, f : &mut fmt::Formatter<'_> ) -> fmt::Result
// {
// f.write_fmt( format_args!( "DynIter" ) )
// }
// }
//
// impl< 'a, T > DynIter< 'a, T >
// {
// /// Creates a new `DynIter` from an iterator that implements `_IterTrait`.
// ///
// /// # Parameters
// ///
// /// - `src`: The source iterator to be wrapped.
// ///
// /// # Returns
// ///
// /// A new instance of `DynIter`.
// pub fn new< It >( src : It ) -> Self
// where
// It : _IterTrait< 'a, & 'a T > + 'a,
// {
// Self( Box::new( src ) )
// }
// }
//
// impl< 'a, T > From< DynIter< 'a, T > > for Box< dyn _IterTrait< 'a, & 'a T > + 'a >
// {
// fn from( src : DynIter< 'a, T > ) -> Self
// {
// src.0
// }
// }
//
// impl< 'a, T > core::ops::Deref for DynIter< 'a, T >
// {
// type Target = Box< dyn _IterTrait< 'a, & 'a T > + 'a >;
//
// fn deref( & self ) -> & Self::Target
// {
// & self.0
// }
// }
//
// impl< 'a, T > core::convert::AsRef< Box< dyn _IterTrait< 'a, & 'a T > + 'a > > for DynIter< 'a, T >
// {
// fn as_ref( & self ) -> & Box< dyn _IterTrait< 'a, & 'a T > + 'a >
// {
// & self.0
// }
// }
//
// impl< 'a, T > Iterator for DynIter< 'a, T >
// {
// type Item = & 'a T;
//
// fn next( & mut self ) -> Option< Self::Item >
// {
// self.0.next()
// }
// }
//
// impl< 'a, T > ExactSizeIterator for DynIter< 'a, T >
// {
// fn len( & self ) -> usize
// {
// self.0.len()
// }
// }
//
// impl< 'a, T > DoubleEndedIterator for DynIter< 'a, T >
// {
// fn next_back( & mut self ) -> Option< Self::Item >
// {
// self.0.next_back()
// }
// }

// =

// trait Cloneable : Clone
// {
// fn clone_box( & self ) -> Box< dyn Cloneable >;
// }
//
// impl< T > Cloneable for T
// where
// T : 'static + Clone,
// {
// fn clone_box( & self ) -> Box< dyn Cloneable >
// {
// Box::new( self.clone() )
// }
// }
//
// pub fn clone_boxed( t : & dyn Cloneable ) -> Box< dyn Cloneable >
// {
// t.clone_box()
// }

}

#[ doc( inline ) ]
Expand Down Expand Up @@ -323,10 +187,6 @@ pub mod exposed
_IterTrait,
IterTrait,
BoxedIter,
// DynIter,
// DynIterFrom,
// IterTrait2,
// IterTrait3,
};
}

Expand Down
Loading
Loading