pub trait Product { fn builder() -> B; fn get(self) -> T; } pub trait Builder { fn build(&self, build_arg: P) -> T; fn append_item(self, item: I) -> Self; fn append_items(self, items: Vec) -> Self; }