blob: f052a173fc428e8a7882c4f085d29f1cc2f35bc7 [file] [log] [blame]
#[macro_use]
extern crate derive_builder;
fn validate_age(age: usize) -> Result<(), Error> {
if age > 200 {
Err(Error::UnrealisticAge(age))
} else {
Ok(())
}
}
fn check_person(builder: &PersonBuilder) -> Result<(), Error> {
if let Some(age) = builder.age {
validate_age(age)
} else {
Ok(())
}
}
#[derive(Builder)]
#[builder(build_fn(validate = "check_person", error = "Error"))]
struct Person {
name: String,
age: usize,
}
// NOTE: This enum has a variant for the uninitialized field case (called MissingData)
// but has forgotten `impl From<derive_builder::UninitializedFieldError>`, which is a
// compile-blocking mistake.
#[derive(Debug)]
enum Error {
/// A required field is not filled out.
MissingData(&'static str),
UnrealisticAge(usize),
}
fn main() {}