macro_rules! newtype {
($name:ident, $type:ty $(, $derive:ty)*, $docs:literal) => { ... };
}
Expand description
Defines a new type that wraps another type.
You can specify an optional number of additional traits to be derived after the wrapped type.
ยงExample
use kx_utils::newtype;
newtype!(Username, String, derive_more::Display, "The login name for the user");
let username = Username::new("bob");
assert_eq!(username.as_ref(), "bob");
assert_eq!(format!("{username}"), r"bob"); // because `derive_more::Display`
assert_eq!(format!("{username:?}"), r#"Username("bob")"#);
let peeled = username.peel(); // moves value out of `username`
assert_eq!(peeled, "bob".to_string());
In this example, [Username] also derives derive_more::Display.