[−][src]Macro intrusive_collections::intrusive_adapter
Macro to generate an implementation of Adapter
for a given set of types.
In particular this will automatically generate implementations of the
get_value
and get_link
methods for a given named field in a struct.
The basic syntax to create an adapter is:
ⓘThis example is not tested
intrusive_adapter!(Adapter = Pointer: Value { link_field: LinkType });
You can create a new instance of an adapter using the new
method or the
NEW
associated constant. The adapter also implements the Default
trait.
Generics
This macro supports generic arguments:
ⓘThis example is not tested
intrusive_adapter!( Adapter<'lifetime, Type, Type2> = Pointer: Value { link_field: LinkType } where Type: Copy, Type2: ?Sized + 'lifetime );
Note that due to macro parsing limitations, T: Trait
bounds are not
supported in the generic argument list. You must list any trait bounds in
a separate where
clause at the end of the macro.
Examples
use intrusive_collections::{LinkedListLink, RBTreeLink}; use intrusive_collections::intrusive_adapter; pub struct Test { link: LinkedListLink, link2: RBTreeLink, } intrusive_adapter!(MyAdapter = Box<Test>: Test { link: LinkedListLink }); intrusive_adapter!(pub MyAdapter2 = Box<Test>: Test { link2: RBTreeLink }); pub struct Test2<T> where T: Clone + ?Sized { link: LinkedListLink, val: T, } intrusive_adapter!(MyAdapter3<'a, T> = &'a Test2<T>: Test2<T> { link: LinkedListLink } where T: ?Sized + Clone + 'a);