summaryrefslogtreecommitdiffstats
path: root/vendor/derive_builder/examples/custom_defaults.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/derive_builder/examples/custom_defaults.rs')
-rw-r--r--vendor/derive_builder/examples/custom_defaults.rs53
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(),
+ }
+ );
+}