pub trait DefineUnion: Sized {
type Parent: TypedWrite;
type TupleDefiner: DefineTuple<Parent = Self>;
type StructDefiner: DefineStruct<Parent = Self>;
type UnionWriter: WriteUnion<Parent = Self::Parent>;
fn define_unit(self, name: FieldName) -> Self;
fn define_tuple(
self,
name: FieldName,
inner: impl FnOnce(Self::TupleDefiner) -> Self
) -> Self;
fn define_struct(
self,
name: FieldName,
inner: impl FnOnce(Self::StructDefiner) -> Self
) -> Self;
fn complete(self) -> Self::UnionWriter;
fn define_newtype<T: StrictEncode + StrictDumb>(
self,
name: FieldName
) -> Self { ... }
}