| #[macro_use] |
| extern crate pretty_assertions; |
| #[macro_use] |
| extern crate derive_builder; |
| |
| #[derive(Debug, PartialEq, Eq, Builder)] |
| #[builder(custom_constructor, build_fn(private, name = "fallible_build"))] |
| struct Request { |
| url: &'static str, |
| username: &'static str, |
| #[builder(default, setter(into))] |
| password: Option<&'static str>, |
| } |
| |
| impl RequestBuilder { |
| pub fn new(url: &'static str, username: &'static str) -> Self { |
| Self { |
| url: Some(url), |
| username: Some(username), |
| ..Self::create_empty() |
| } |
| } |
| |
| pub fn build(&self) -> Request { |
| self.fallible_build() |
| .expect("All required fields set upfront") |
| } |
| } |
| |
| #[test] |
| fn new_then_build_succeeds() { |
| assert_eq!( |
| RequestBuilder::new("...", "!!!").build(), |
| Request { |
| url: "...", |
| username: "!!!", |
| password: None |
| } |
| ); |
| } |
| |
| #[test] |
| fn new_then_set_succeeds() { |
| assert_eq!( |
| RequestBuilder::new("...", "!!!").password("test").build(), |
| Request { |
| url: "...", |
| username: "!!!", |
| password: Some("test") |
| } |
| ); |
| } |