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