Macro derive_dyn_traits

Source
macro_rules! derive_dyn_traits {
    ($trait:ident use $registry:ty = $reginit:expr) => { ... };
    ($trait:ident) => { ... };
}
Expand description

§Generate DynXso and MayContain trait implementations

This macro generates trait DynXso and MayContain trait implementations for a given trait. For more background information on when that is a useful thing to have, see the dynxso module.

§Syntax

This macro can be called in two forms:

  • derive_dyn_traits!(Trait) uses the default BuilderRegistry as DynXso::Registry type and is only available if xso is built with the "std" feature.
  • derive_dyn_traits!(Trait use Type = expr) where Type is used as DynXso::Registry, initialized with expr. This form is available for any set of crate features.

§Example

When std is enabled, the simple syntax can be used.

 use xso::derive_dyn_traits;
 trait Foo: Any {}
 derive_dyn_traits!(Foo);

 Note that the trait this macro is called on must have a bound on Any, otherwise the generated code will not compile:

 use xso::derive_dyn_traits;
 trait Foo {}
 derive_dyn_traits!(Foo);
 // ↑ will generate a bunch of errors about incompatible types

If the std feature is not enabled or if you want to use another Registry for whichever reason, the explicit form can be used:

use xso::derive_dyn_traits;
trait Foo: Any {}
struct Registry { /* .. */ }
derive_dyn_traits!(Foo use Registry = Registry { /* .. */ });

In that case, you should review the trait requirements of the DynXso::Registry associated type.