/// A value which can inherit a default value or have an explicit value specified. /// /// # Usage /// This type is meant for attributes like `default` in `darling`, which can take the following forms: /// /// * `#[darling(default)]` /// * `#[darling(default="path::to::fn")]` /// /// In a struct collecting input for this attribute, that would be written as: /// /// ```rust,ignore /// use darling::{util::Override, FromField}; /// #[derive(FromField)] /// #[darling(attributes(darling))] /// pub struct Options { /// default: Option<Override<syn::Path>>, /// } /// /// impl Options { /// fn hydrate(self) -> Option<syn::Path> { /// self.default.map(|ov| ov.unwrap_or(syn::parse_path("::Default::default").unwrap())) /// } /// } /// ``` /// /// The `word` format (with no associated value), would produce `Override::Inherit`, while a list /// or value format would produce `Override::Explicit`. #[derive(Debug, Clone, PartialEq, Eq)] pubenumOverride<T> { /// Inherit the eventual value from an external source.
Inherit,
/// Explicitly set the value.
Explicit(T),
}
impl<T> Override<T> { /// Converts from `Override<T>` to `Override<&T>`. /// /// Produces a new `Override`, containing a reference into the original, leaving the original in place. pubfn as_ref(&self) -> Override<&T> { match *self {
Inherit => Inherit,
Explicit(ref val) => Explicit(val),
}
}
/// Converts from `Override<T>` to `Override<&mut T>`. /// /// Produces a new `Override`, containing a mutable reference into the original. pubfn as_mut(&mutself) -> Override<&mut T> { match *self {
Inherit => Inherit,
Explicit(refmut val) => Explicit(val),
}
}
/// Returns `true` if the override is an `Explicit` value. pubfn is_explicit(&self) -> bool { match *self {
Inherit => false,
Explicit(_) => true,
}
}
/// Unwraps an override, yielding the content of an `Explicit`. Otherwise, it returns `optb`. pubfn unwrap_or(self, optb: T) -> T { matchself {
Inherit => optb,
Explicit(val) => val,
}
}
/// Unwraps an override, yielding the content of an `Explicit`. Otherwise, it calls `op`. pubfn unwrap_or_else<F>(self, op: F) -> T where
F: FnOnce() -> T,
{ matchself {
Inherit => op(),
Explicit(val) => val,
}
}
}
impl<T: Default> Override<T> { /// Returns the contained value or the default value of `T`. pubfn unwrap_or_default(self) -> T { matchself {
Inherit => Default::default(),
Explicit(val) => val,
}
}
}
/// Parses a `Meta`. A bare word will produce `Override::Inherit`, while /// any value will be forwarded to `T::from_meta`. impl<T: FromMeta> FromMeta forOverride<T> { fn from_word() -> Result<Self> {
Ok(Inherit)
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.