rustc/vendor/derive_builder/tests/custom_constructor.rs
2024-05-29 11:23:22 +02:00

53 lines
1.1 KiB
Rust

#[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")
}
);
}