cgp_field/traits/
build_field.rs

1use 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}