derive_tools/
lib.rs

1#![ cfg_attr( feature = "no_std", no_std ) ]
2#![ doc( html_logo_url = "https://raw.githubusercontent.com/Wandalen/wTools/master/asset/img/logo_v3_trans_square.png" ) ]
3#![ doc
4(
5  html_favicon_url = "https://raw.githubusercontent.com/Wandalen/wTools/alpha/asset/img/logo_v3_trans_square_icon_small_v2.ico"
6) ]
7#![ doc( html_root_url = "https://docs.rs/derive_tools/latest/derive_tools/" ) ]
8#![ cfg_attr( doc, doc = include_str!( concat!( env!( "CARGO_MANIFEST_DIR" ), "/", "readme.md" ) ) ) ]
9#![ cfg_attr( not( doc ), doc = "Derive macro tools" ) ]
10
11//! # Rule Compliance & Architectural Notes
12//!
13//! This crate has been systematically updated to comply with the Design and Codestyle Rulebooks.
14//! Key compliance achievements:
15//!
16//! ## Completed Compliance Work:
17//!
18//! 1. **Feature Architecture**: All functionality is properly gated behind the "enabled" feature
19//!    following the mandatory 'enabled' and 'full' features requirement.
20//!
21//! 2. **Dependencies**: Uses workspace dependency inheritance with `{ workspace = true }`.
22//!    All derive macro dependencies are centralized in the workspace Cargo.toml.
23//!
24//! 3. **Attribute Formatting**: All attributes use proper spacing per Universal Formatting Rule.
25//!
26//! 4. **Documentation Strategy**: Uses `#![ doc = include_str!(...) ]` to include readme.md
27//!    instead of duplicating documentation.
28//!
29//! 5. **Namespace Organization**: Uses the standard own/orphan/exposed/prelude namespace
30//!    pattern for controlled visibility and re-exports.
31
32#[ cfg( feature = "derive_from" ) ]
33pub use derive_tools_meta::From;
34#[ cfg( feature = "derive_inner_from" ) ]
35pub use derive_tools_meta::InnerFrom;
36#[ cfg( feature = "derive_new" ) ]
37pub use derive_tools_meta::New;
38#[ cfg( feature = "derive_not" ) ]
39pub use derive_tools_meta::Not;
40
41#[ cfg( feature = "derive_variadic_from" ) ]
42pub use derive_tools_meta::VariadicFrom;
43#[ cfg( feature = "derive_as_mut" ) ]
44pub use derive_tools_meta::AsMut;
45#[ cfg( feature = "derive_as_ref" ) ]
46pub use derive_tools_meta::AsRef;
47#[ cfg( feature = "derive_deref" ) ]
48pub use derive_tools_meta::Deref;
49#[ cfg( feature = "derive_deref_mut" ) ]
50pub use derive_tools_meta::DerefMut;
51#[ cfg( feature = "derive_index" ) ]
52pub use derive_tools_meta::Index;
53#[ cfg( feature = "derive_index_mut" ) ]
54pub use derive_tools_meta::IndexMut;
55#[ cfg( feature = "derive_more" ) ]
56#[ allow( unused_imports ) ]
57mod derive_more {
58  #[ cfg( feature = "derive_add" ) ]
59  pub use ::derive_more::{Add, Sub};
60  #[ cfg( feature = "derive_add_assign" ) ]
61  pub use ::derive_more::{AddAssign, SubAssign};
62  #[ cfg( feature = "derive_constructor" ) ]
63  pub use ::derive_more::Constructor;
64  #[ cfg( feature = "derive_error" ) ]
65  pub use ::derive_more::Error;
66  #[ cfg( feature = "derive_into" ) ]
67  pub use ::derive_more::Into;
68  // #[ cfg( feature = "derive_iterator" ) ]
69  // pub use ::derive_more::Iterator;
70  #[ cfg( feature = "derive_into_iterator" ) ]
71  pub use ::derive_more::IntoIterator;
72  #[ cfg( feature = "derive_mul" ) ]
73  pub use ::derive_more::{Mul, Div};
74  #[ cfg( feature = "derive_mul_assign" ) ]
75  pub use ::derive_more::{MulAssign, DivAssign};
76  #[ cfg( feature = "derive_sum" ) ]
77  pub use ::derive_more::Sum;
78  #[ cfg( feature = "derive_try_into" ) ]
79  pub use ::derive_more::TryInto;
80  #[ cfg( feature = "derive_is_variant" ) ]
81  pub use ::derive_more::IsVariant;
82  #[ cfg( feature = "derive_unwrap" ) ]
83  pub use ::derive_more::Unwrap;
84
85  // qqq : list all
86  // qqq : make sure all features of derive_more is reexported
87}
88
89#[ doc( inline ) ]
90#[cfg(any(feature = "derive_variadic_from", feature = "type_variadic_from"))]
91pub use variadic_from as variadic;
92
93/// Namespace with dependencies.
94#[ allow( unused_imports ) ]
95#[ cfg( feature = "enabled" ) ]
96pub mod dependency {
97
98  #[ doc( inline ) ]
99  pub use ::derive_tools_meta;
100
101  #[ doc( inline ) ]
102  #[ cfg( feature = "derive_clone_dyn" ) ]
103  pub use ::clone_dyn::{self, dependency::*};
104
105  #[ doc( inline ) ]
106  #[cfg(any(feature = "derive_variadic_from", feature = "type_variadic_from"))]
107  pub use ::variadic_from::{self, dependency::*};
108
109  #[ doc( inline ) ]
110  #[ cfg( feature = "derive_more" ) ]
111  pub use ::derive_more;
112  #[ doc( inline ) ]
113  #[ cfg( feature = "derive_strum" ) ]
114  pub use ::strum;
115  #[ doc( inline ) ]
116  #[ cfg( feature = "parse_display" ) ]
117  pub use ::parse_display;
118}
119
120#[ doc( inline ) ]
121#[ cfg( feature = "enabled" ) ]
122#[ allow( unused_imports ) ]
123pub use own::*;
124
125/// Own namespace of the module.
126#[ cfg( feature = "enabled" ) ]
127#[ allow( unused_imports ) ]
128pub mod own {
129
130  use super::*;
131  #[ doc( inline ) ]
132  pub use orphan::*;
133  #[ cfg( feature = "derive_clone_dyn" ) ]
134  #[ doc( inline ) ]
135  pub use ::clone_dyn::orphan::*;
136}
137
138/// Orphan namespace of the module.
139#[ cfg( feature = "enabled" ) ]
140#[ allow( unused_imports ) ]
141pub mod orphan {
142
143  use super::*;
144  #[ doc( inline ) ]
145  pub use exposed::*;
146}
147
148/// Exposed namespace of the module.
149#[ cfg( feature = "enabled" ) ]
150#[ allow( unused_imports ) ]
151pub mod exposed {
152
153  use super::*;
154  #[ doc( inline ) ]
155  pub use prelude::*;
156
157  #[ cfg( feature = "derive_more" ) ]
158  #[ doc( inline ) ]
159  pub use super::derive_more::*;
160
161  #[ cfg( feature = "derive_strum" ) ]
162  #[ doc( inline ) ]
163  pub use ::strum::*;
164  // qqq : xxx : name all
165
166  #[cfg(any(feature = "derive_variadic_from", feature = "type_variadic_from"))]
167  #[ doc( inline ) ]
168  pub use ::variadic_from::exposed::*;
169
170  #[ cfg( feature = "derive_strum" ) ]
171  #[ doc( inline ) ]
172  pub use ::strum::*;
173
174  #[ cfg( feature = "derive_display" ) ]
175  #[ doc( inline ) ]
176  pub use ::parse_display::Display;
177
178  #[ cfg( feature = "derive_from_str" ) ]
179  #[ doc( inline ) ]
180  pub use ::parse_display::FromStr;
181
182  #[ cfg( feature = "derive_clone_dyn" ) ]
183  #[ doc( inline ) ]
184  pub use ::clone_dyn::exposed::*;
185
186  #[ cfg( feature = "derive_clone_dyn" ) ]
187  #[ doc( inline ) ]
188  pub use ::clone_dyn;
189
190  #[ doc( inline ) ]
191  pub use ::derive_tools_meta::*;
192
193  #[ doc( inline ) ]
194  #[ cfg( feature = "derive_from" ) ]
195  pub use ::derive_tools_meta::From;
196
197  #[ doc( inline ) ]
198  #[ cfg( feature = "derive_inner_from" ) ]
199  pub use ::derive_tools_meta::InnerFrom;
200
201  #[ doc( inline ) ]
202  #[ cfg( feature = "derive_new" ) ]
203  pub use ::derive_tools_meta::New;
204}
205
206/// Prelude to use essentials: `use my_module::prelude::*`.
207#[ cfg( feature = "enabled" ) ]
208#[ allow( unused_imports ) ]
209pub mod prelude {
210  use super::*;
211  #[ cfg( feature = "derive_clone_dyn" ) ]
212  #[ doc( inline ) ]
213  pub use ::clone_dyn;
214
215  #[ cfg( feature = "derive_clone_dyn" ) ]
216  #[ doc( inline ) ]
217  pub use ::clone_dyn::prelude::*;
218
219  #[cfg(any(feature = "derive_variadic_from", feature = "type_variadic_from"))]
220  #[ doc( inline ) ]
221  pub use ::variadic_from::prelude::*;
222}
223