diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 18:31:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 18:31:44 +0000 |
commit | c23a457e72abe608715ac76f076f47dc42af07a5 (patch) | |
tree | 2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /vendor/derive_builder/examples/custom_defaults.rs | |
parent | Releasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-c23a457e72abe608715ac76f076f47dc42af07a5.tar.xz rustc-c23a457e72abe608715ac76f076f47dc42af07a5.zip |
Merging upstream version 1.74.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/derive_builder/examples/custom_defaults.rs')
-rw-r--r-- | vendor/derive_builder/examples/custom_defaults.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/derive_builder/examples/custom_defaults.rs b/vendor/derive_builder/examples/custom_defaults.rs new file mode 100644 index 000000000..bf493d9e5 --- /dev/null +++ b/vendor/derive_builder/examples/custom_defaults.rs @@ -0,0 +1,53 @@ +#[macro_use] +extern crate derive_builder; + +#[derive(Builder, PartialEq, Debug)] +struct Lorem { + ipsum: String, + #[builder(default = "self.default_dolor()?")] + dolor: String, + #[builder(default = "self.default_sit()?")] + sit: String, + #[builder(setter(skip), default = "self.default_amet()")] + amet: String, +} + +impl LoremBuilder { + fn default_dolor(&self) -> Result<String, String> { + self.ipsum + .clone() + .ok_or_else(|| "ipsum must be initialized to build dolor".to_string()) + } + + fn default_sit(&self) -> Result<String, String> { + match self.ipsum { + Some(ref x) if x.chars().count() > 3 => Ok(format!("sit {}", x)), + _ => Err("ipsum must at least 3 chars to build sit".to_string()), + } + } + + fn default_amet(&self) -> String { + if let Some(ref x) = self.ipsum { + format!("amet {}", x) + } else { + "..nothing there".to_string() + } + } +} + +fn main() { + let x = LoremBuilder::default() + .ipsum("ipsum".to_string()) + .build() + .unwrap(); + + assert_eq!( + x, + Lorem { + ipsum: "ipsum".to_string(), + dolor: "ipsum".to_string(), + sit: "sit ipsum".to_string(), + amet: "amet ipsum".to_string(), + } + ); +} |