derive_builder_core/
options.rs

1/// Controls the signature of a setter method,
2/// more specifically how `self` is passed and returned.
3///
4/// It can also be generalized to methods with different parameter sets and
5/// return types, e.g. the `build()` method.
6#[derive(PartialEq, Eq, Debug, Clone, Copy, FromMeta)]
7pub enum BuilderPattern {
8    /// E.g. `fn bar(self, bar: Bar) -> Self`.
9    Owned,
10    /// E.g. `fn bar(&mut self, bar: Bar) -> &mut Self`.
11    Mutable,
12    /// E.g. `fn bar(&self, bar: Bar) -> Self`.
13    ///
14    /// Note:
15    /// - Needs to `clone` in order to return an _updated_ instance of `Self`.
16    /// - There is a great chance that the Rust compiler (LLVM) will
17    ///   optimize chained `clone` calls away in release mode.
18    ///   Therefore this turns out not to be as bad as it sounds.
19    Immutable,
20}
21
22impl BuilderPattern {
23    /// Returns true if this style of builder needs to be able to clone its
24    /// fields during the `build` method.
25    pub fn requires_clone(&self) -> bool {
26        *self != Self::Owned
27    }
28}
29
30/// Defaults to `Mutable`.
31impl Default for BuilderPattern {
32    fn default() -> Self {
33        Self::Mutable
34    }
35}
36
37#[derive(Debug, Clone, FromMeta)]
38pub struct Each {
39    pub name: syn::Ident,
40    #[darling(default)]
41    pub into: bool,
42}
43
44impl From<syn::Ident> for Each {
45    fn from(name: syn::Ident) -> Self {
46        Self { name, into: false }
47    }
48}