cgp_field/traits/
build_field.rs1use core::marker::PhantomData;
2
3use crate::impls::{IsNothing, IsPresent};
4use crate::traits::{PartialData, UpdateField};
5
6pub trait BuildField<Tag> {
7 type Value;
8
9 type Output;
10
11 fn build_field(self, _tag: PhantomData<Tag>, value: Self::Value) -> Self::Output;
12}
13
14impl<Context, Tag> BuildField<Tag> for Context
15where
16 Context: UpdateField<Tag, IsPresent, Mapper = IsNothing>,
17{
18 type Value = Context::Value;
19
20 type Output = Context::Output;
21
22 fn build_field(self, tag: PhantomData<Tag>, value: Self::Value) -> Self::Output {
23 self.update_field(tag, value).1
24 }
25}
26
27pub trait FinalizeBuild: PartialData {
28 fn finalize_build(self) -> Self::Target;
29}