select

Macro select 

Source
macro_rules! select {
    ($($module:ident)::+ : + $field:ident $($rest:tt)*) => { ... };
    ($($module:ident)::+ : - $field:ident $($rest:tt)*) => { ... };
    ($($module:ident)::+ :) => { ... };
    ($($module:ident)::+ : $field:ident) => { ... };
    ($($module:ident)::+ : $field:ident,) => { ... };
    ($($module:ident)::+ : ? $field:ident) => { ... };
    ($($module:ident)::+ : ? $field:ident,) => { ... };
    ($($module:ident)::+ : $field:ident, $($rest:tt)+) => { ... };
    ($($module:ident)::+ : ? $field:ident, $($rest:tt)+) => { ... };
}
Expand description

Construct a FieldSet by selecting fields from a module.

§Syntax

  • select!(module: field) - field is Present
  • select!(module: ?field) - field is Optional
  • select!(module: all) - all fields Present (expands to module::with::all::Present)
  • Multiple fields compose: select!(module: field1, ?field2) expands to module::with::field1::Present<module::with::field2::Optional>

§Examples

// For User { name, email, id }
type NameAndEmail = select!(user: name, email);
type NameOptionalEmail = select!(user: name, ?email);
type AllPresent = select!(user: all);