Macro supercow::supercow_features
[−]
[src]
macro_rules! supercow_features { ($(#[$meta:meta])* pub trait $feature_name:ident: $($stuff:tt)*) => { ... }; (@_ACCUM $(#[$meta:meta])* pub trait $feature_name:ident: $clone:tt $twostep:tt [$($others:tt),*] Clone $($more:tt)*) => { ... }; (@_ACCUM $(#[$meta:meta])* pub trait $feature_name:ident: $clone:tt $twostep:tt [$($others:tt),*] TwoStepShared($($inner:tt)*) $($more:tt)*) => { ... }; (@_ACCUM $(#[$meta:meta])* pub trait $feature_name:ident: $clone:tt $twostep:tt [$($others:tt),*], $($more:tt)*) => { ... }; (@_ACCUM $(#[$meta:meta])* pub trait $feature_name:ident: $clone:tt $twostep:tt [$($others:ident),*] $other:ident $($more:tt)*) => { ... }; (@_ACCUM $(#[$meta:meta])* pub trait $feature_name:ident: $clone:tt $twostep:tt [$($others:ident),*]) => { ... }; (@_DEFINE $(#[$meta:meta])* pub trait $feature_name:ident: [$($clone:ident $clone_boxed:ident)*] [$($twostep_inner:ident)*] [$($req:ident),*]) => { ... }; }
Defines a "feature set" for a custom Supercow type.
Syntax
#[macro_use] extern crate supercow; supercow_features!( /// Some documentation, etc, if desired. pub trait FeatureName: SomeTrait, AnotherTrait); supercow_features!( pub trait FeatureName2: SomeTrait, Clone, AnotherTrait); Run
Semantics
A public trait named FeatureName is defined which extends all the listed
traits, minus special cases below.
If Clone is listed, the trait gains a clone_boxed() method and
Box<FeatureName> is Clone.
If TwoStepShared(SomeType) is listed, the boxed type will implement
TwoStepShared for all OWNED/BORROWED pairs where
SomeType<OWNED,BORROWED> implements the feature a whole and
OWNED: SafeBorrow<BORROWED>.
All types which implement all the listed traits (including special cases)
implement FeatureName.