macro_rules! forward_as_ref {
(<$($generic:ident),+> in $($rest:tt)+) => { ... };
(<const $($rest:tt)+) => { ... };
(<$generic:ident, $($rest:tt)+) => { ... };
(@impl [$($generic:tt)+] $this:ty => $target:ty) => { ... };
(@impl [$($generic:tt)+] $this:ty => $field:ident : $target:ty) => { ... };
($this:ty => $target:ty) => { ... };
($this:ty => $field:ident : $target:ty) => { ... };
}Expand description
Implement AsRef by forwarding to a field’s implementation.
The first argument is the struct to create the impl for and the second is the target type
produced by the field’s AsRef implementation.
Declare type and const parameters before in.
§Examples
With a newtype struct:
use impl_more::forward_as_ref;
struct Foo(String);
forward_as_ref!(Foo => str);
let foo = Foo("bar".to_owned());
assert_eq!(foo.as_ref(), "bar");With a named field struct and type parameters:
use impl_more::forward_as_ref;
struct Foo<T> { inner: Vec<T> }
forward_as_ref!(<T> in Foo<T> => inner: [T]);
let foo = Foo { inner: vec![1, 2, 3] };
assert_eq!(foo.as_ref(), &[1, 2, 3]);