1#![cfg_attr(
36 all(
37 feature = "add",
38 feature = "display",
39 feature = "from",
40 feature = "into"
41 ),
42 doc = include_str!("../README.md")
43)]
44#![cfg_attr(not(feature = "std"), no_std)]
45#![cfg_attr(docsrs, feature(doc_auto_cfg))]
46#![cfg_attr(any(not(docsrs), ci), deny(rustdoc::all))]
47#![forbid(non_ascii_idents, unsafe_code)]
48#![warn(clippy::nonstandard_macro_braces)]
49
50#[doc(hidden)]
54pub use core;
55
56#[doc(hidden)]
58pub mod __private {
59 #[cfg(feature = "as_ref")]
60 pub use crate::r#as::{Conv, ExtractRef};
61
62 #[cfg(feature = "debug")]
63 pub use crate::fmt::{debug_tuple, DebugTuple};
64
65 #[cfg(feature = "error")]
66 pub use crate::vendor::thiserror::aserror::AsDynError;
67}
68
69pub mod derive {
73 #[allow(unused_imports)]
76 #[doc(inline)]
77 pub use derive_more_impl::*;
78}
79
80#[cfg(feature = "add")]
83mod add;
84#[cfg(feature = "add")]
85pub use crate::add::{BinaryError, WrongVariantError};
86
87#[cfg(any(feature = "add", feature = "not"))]
88mod ops;
89#[cfg(any(feature = "add", feature = "not"))]
90pub use crate::ops::UnitError;
91
92#[cfg(feature = "as_ref")]
93mod r#as;
94
95#[cfg(feature = "debug")]
96mod fmt;
97
98#[cfg(feature = "error")]
99mod vendor;
100
101#[cfg(feature = "from_str")]
102mod r#str;
103#[cfg(feature = "from_str")]
104#[doc(inline)]
105pub use crate::r#str::FromStrError;
106
107#[cfg(any(feature = "try_into", feature = "try_from"))]
108mod convert;
109#[cfg(feature = "try_from")]
110#[doc(inline)]
111pub use crate::convert::TryFromReprError;
112#[cfg(feature = "try_into")]
113#[doc(inline)]
114pub use crate::convert::TryIntoError;
115
116#[cfg(feature = "try_unwrap")]
117mod try_unwrap;
118#[cfg(feature = "try_unwrap")]
119#[doc(inline)]
120pub use crate::try_unwrap::TryUnwrapError;
121
122macro_rules! re_export_traits((
133 $feature:literal, $new_module_name:ident, $module:path $(, $traits:ident)* $(,)?) => {
134 #[cfg(all(feature = $feature, any(not(docsrs), ci)))]
135 mod $new_module_name {
136 #[doc(hidden)]
137 pub use $module::{$($traits),*};
138 }
139
140 #[cfg(all(feature = $feature, any(not(docsrs), ci)))]
141 #[doc(hidden)]
142 pub use crate::all_traits_and_derives::$new_module_name::*;
143 }
144);
145
146mod all_traits_and_derives {
147 re_export_traits!(
148 "add",
149 add_traits,
150 core::ops,
151 Add,
152 BitAnd,
153 BitOr,
154 BitXor,
155 Sub,
156 );
157 re_export_traits!(
158 "add_assign",
159 add_assign_traits,
160 core::ops,
161 AddAssign,
162 BitAndAssign,
163 BitOrAssign,
164 BitXorAssign,
165 SubAssign,
166 );
167 re_export_traits!("as_ref", as_ref_traits, core::convert, AsMut, AsRef);
168 re_export_traits!("debug", debug_traits, core::fmt, Debug);
169 re_export_traits!("deref", deref_traits, core::ops, Deref);
170 re_export_traits!("deref_mut", deref_mut_traits, core::ops, DerefMut);
171 re_export_traits!(
172 "display",
173 display_traits,
174 core::fmt,
175 Binary,
176 Display,
177 LowerExp,
178 LowerHex,
179 Octal,
180 Pointer,
181 UpperExp,
182 UpperHex,
183 );
184
185 #[cfg(not(feature = "std"))]
186 re_export_traits!("error", error_traits, core::error, Error);
187 #[cfg(feature = "std")]
188 re_export_traits!("error", error_traits, std::error, Error);
189
190 re_export_traits!("from", from_traits, core::convert, From);
191
192 re_export_traits!("from_str", from_str_traits, core::str, FromStr);
193
194 re_export_traits!("index", index_traits, core::ops, Index);
195
196 re_export_traits!("index_mut", index_mut_traits, core::ops, IndexMut);
197
198 re_export_traits!("into", into_traits, core::convert, Into);
199
200 re_export_traits!(
201 "into_iterator",
202 into_iterator_traits,
203 core::iter,
204 IntoIterator,
205 );
206
207 re_export_traits!("mul", mul_traits, core::ops, Div, Mul, Rem, Shl, Shr);
208
209 #[cfg(feature = "mul_assign")]
210 re_export_traits!(
211 "mul_assign",
212 mul_assign_traits,
213 core::ops,
214 DivAssign,
215 MulAssign,
216 RemAssign,
217 ShlAssign,
218 ShrAssign,
219 );
220
221 re_export_traits!("not", not_traits, core::ops, Neg, Not);
222
223 re_export_traits!("sum", sum_traits, core::iter, Product, Sum);
224
225 re_export_traits!("try_from", try_from_traits, core::convert, TryFrom);
226
227 re_export_traits!("try_into", try_into_traits, core::convert, TryInto);
228
229 #[cfg(feature = "add")]
232 pub use derive_more_impl::{Add, BitAnd, BitOr, BitXor, Sub};
233
234 #[cfg(feature = "add_assign")]
235 pub use derive_more_impl::{
236 AddAssign, BitAndAssign, BitOrAssign, BitXorAssign, SubAssign,
237 };
238
239 #[cfg(feature = "as_ref")]
240 pub use derive_more_impl::{AsMut, AsRef};
241
242 #[cfg(feature = "constructor")]
243 pub use derive_more_impl::Constructor;
244
245 #[cfg(feature = "debug")]
246 pub use derive_more_impl::Debug;
247
248 #[cfg(feature = "deref")]
249 pub use derive_more_impl::Deref;
250
251 #[cfg(feature = "deref_mut")]
252 pub use derive_more_impl::DerefMut;
253
254 #[cfg(feature = "display")]
255 pub use derive_more_impl::{
256 Binary, Display, LowerExp, LowerHex, Octal, Pointer, UpperExp, UpperHex,
257 };
258
259 #[cfg(feature = "error")]
260 pub use derive_more_impl::Error;
261
262 #[cfg(feature = "from")]
263 pub use derive_more_impl::From;
264
265 #[cfg(feature = "from_str")]
266 pub use derive_more_impl::FromStr;
267
268 #[cfg(feature = "index")]
269 pub use derive_more_impl::Index;
270
271 #[cfg(feature = "index_mut")]
272 pub use derive_more_impl::IndexMut;
273
274 #[cfg(feature = "into")]
275 pub use derive_more_impl::Into;
276
277 #[cfg(feature = "into_iterator")]
278 pub use derive_more_impl::IntoIterator;
279
280 #[cfg(feature = "is_variant")]
281 pub use derive_more_impl::IsVariant;
282
283 #[cfg(feature = "mul")]
284 pub use derive_more_impl::{Div, Mul, Rem, Shl, Shr};
285
286 #[cfg(feature = "mul_assign")]
287 pub use derive_more_impl::{DivAssign, MulAssign, RemAssign, ShlAssign, ShrAssign};
288
289 #[cfg(feature = "not")]
290 pub use derive_more_impl::{Neg, Not};
291
292 #[cfg(feature = "sum")]
293 pub use derive_more_impl::{Product, Sum};
294
295 #[cfg(feature = "try_from")]
296 pub use derive_more_impl::TryFrom;
297
298 #[cfg(feature = "try_into")]
299 pub use derive_more_impl::TryInto;
300
301 #[cfg(feature = "try_unwrap")]
302 pub use derive_more_impl::TryUnwrap;
303
304 #[cfg(feature = "unwrap")]
305 pub use derive_more_impl::Unwrap;
306}
307
308#[cfg(feature = "add")]
314#[doc(hidden)]
315pub use all_traits_and_derives::{Add, BitAnd, BitOr, BitXor, Sub};
316
317#[cfg(feature = "add_assign")]
318#[doc(hidden)]
319pub use all_traits_and_derives::{
320 AddAssign, BitAndAssign, BitOrAssign, BitXorAssign, SubAssign,
321};
322
323#[cfg(feature = "as_ref")]
324#[doc(hidden)]
325pub use all_traits_and_derives::{AsMut, AsRef};
326
327#[cfg(feature = "constructor")]
328#[doc(hidden)]
329pub use all_traits_and_derives::Constructor;
330
331#[cfg(feature = "debug")]
332#[doc(hidden)]
333pub use all_traits_and_derives::Debug;
334
335#[cfg(feature = "deref")]
336#[doc(hidden)]
337pub use all_traits_and_derives::Deref;
338
339#[cfg(feature = "deref_mut")]
340#[doc(hidden)]
341pub use all_traits_and_derives::DerefMut;
342
343#[cfg(feature = "display")]
344#[doc(hidden)]
345pub use all_traits_and_derives::{
346 Binary, Display, LowerExp, LowerHex, Octal, Pointer, UpperExp, UpperHex,
347};
348
349#[cfg(feature = "error")]
350#[doc(hidden)]
351pub use all_traits_and_derives::Error;
352
353#[cfg(feature = "from")]
354#[doc(hidden)]
355pub use all_traits_and_derives::From;
356
357#[cfg(feature = "from_str")]
358#[doc(hidden)]
359pub use all_traits_and_derives::FromStr;
360
361#[cfg(feature = "index")]
362#[doc(hidden)]
363pub use all_traits_and_derives::Index;
364
365#[cfg(feature = "index_mut")]
366#[doc(hidden)]
367pub use all_traits_and_derives::IndexMut;
368
369#[cfg(feature = "into")]
370#[doc(hidden)]
371pub use all_traits_and_derives::Into;
372
373#[cfg(feature = "into_iterator")]
374#[doc(hidden)]
375pub use all_traits_and_derives::IntoIterator;
376
377#[cfg(feature = "is_variant")]
378#[doc(hidden)]
379pub use all_traits_and_derives::IsVariant;
380
381#[cfg(feature = "mul")]
382#[doc(hidden)]
383pub use all_traits_and_derives::{Div, Mul, Rem, Shl, Shr};
384
385#[cfg(feature = "mul_assign")]
386#[doc(hidden)]
387pub use all_traits_and_derives::{
388 DivAssign, MulAssign, RemAssign, ShlAssign, ShrAssign,
389};
390
391#[cfg(feature = "not")]
392#[doc(hidden)]
393pub use all_traits_and_derives::{Neg, Not};
394
395#[cfg(feature = "sum")]
396#[doc(hidden)]
397pub use all_traits_and_derives::{Product, Sum};
398
399#[cfg(feature = "try_from")]
400#[doc(hidden)]
401pub use all_traits_and_derives::TryFrom;
402
403#[cfg(feature = "try_into")]
404#[doc(hidden)]
405pub use all_traits_and_derives::TryInto;
406
407#[cfg(feature = "try_unwrap")]
408#[doc(hidden)]
409pub use all_traits_and_derives::TryUnwrap;
410
411#[cfg(feature = "unwrap")]
412#[doc(hidden)]
413pub use all_traits_and_derives::Unwrap;
414
415#[allow(unused_imports)]
418pub use derive_more_impl::*;
419
420#[cfg(not(any(
422 feature = "full",
423 feature = "add",
424 feature = "add_assign",
425 feature = "as_ref",
426 feature = "constructor",
427 feature = "debug",
428 feature = "deref",
429 feature = "deref_mut",
430 feature = "display",
431 feature = "error",
432 feature = "from",
433 feature = "from_str",
434 feature = "index",
435 feature = "index_mut",
436 feature = "into",
437 feature = "into_iterator",
438 feature = "is_variant",
439 feature = "mul",
440 feature = "mul_assign",
441 feature = "not",
442 feature = "sum",
443 feature = "try_from",
444 feature = "try_into",
445 feature = "try_unwrap",
446 feature = "unwrap",
447)))]
448compile_error!(
449 "at least one derive feature must be enabled (or the \"full\" feature enabling all the derives)"
450);