use std::marker::PhantomData;
use std::borrow::Borrow;
use std::ops::Deref;
use serde::Serialize;
pub trait FieldType<TMapping, TPivot>
where
TMapping: FieldMapping<TPivot>,
TPivot: Default,
{
fn field_mapping() -> TMapping {
TMapping::default()
}
}
pub trait FieldMapping<TPivot>
where
Self: Default,
TPivot: Default,
{
type DocumentField: Serialize + Default;
fn data_type() -> &'static str {
"object"
}
}
pub trait StdField<TStd>
where
Self: PartialEq<TStd> + Deref<Target = TStd> + Borrow<TStd>,
TStd: PartialEq<Self>,
{
}
#[derive(Default)]
pub struct DocumentField<TMapping, TPivot>
where
TMapping: FieldMapping<TPivot>,
TPivot: Default,
{
_m: PhantomData<(TMapping, TPivot)>,
}
impl<TMapping, TPivot> From<TMapping> for DocumentField<TMapping, TPivot>
where
TMapping: FieldMapping<TPivot>,
TPivot: Default,
{
fn from(_: TMapping) -> Self {
DocumentField::<TMapping, TPivot>::default()
}
}