use super::*;
use std::convert::TryFrom;
#[derive(Clone, Debug)]
pub enum Ciboulette2PgAdditionalFieldType {
Relationship,
Sorting,
}
impl Ciboulette2PgAdditionalFieldType {
pub(crate) fn to_safe_modifier(&self) -> Ciboulette2PgSafeIdentModifier {
match self {
Ciboulette2PgAdditionalFieldType::Relationship => {
Ciboulette2PgSafeIdentModifier::Prefix(CIBOULETTE_REL_PREFIX)
}
Ciboulette2PgAdditionalFieldType::Sorting => {
Ciboulette2PgSafeIdentModifier::Prefix(CIBOULETTE_SORT_PREFIX)
}
}
}
}
#[derive(Clone, Debug, Getters)]
#[getset(get = "pub")]
pub(crate) struct Ciboulette2PgAdditionalField {
pub(crate) type_: Ciboulette2PgAdditionalFieldType,
pub(crate) ident: Ciboulette2PgTableField,
pub(crate) name: Ciboulette2PgSafeIdent,
pub(crate) ciboulette_type: Arc<CibouletteResourceType>,
}
impl Ciboulette2PgAdditionalField {
pub fn new(
name: Ciboulette2PgSafeIdent,
ident: Ciboulette2PgTableField,
type_: Ciboulette2PgAdditionalFieldType,
ciboulette_type: Arc<CibouletteResourceType>,
) -> Self {
Ciboulette2PgAdditionalField {
name: name.add_modifier(type_.to_safe_modifier()),
ident,
type_,
ciboulette_type,
}
}
pub fn from_sorting_field(
el: &CibouletteSortingElement,
main_type: Arc<CibouletteResourceType>,
) -> Result<Self, Ciboulette2PgError> {
let talbe_field_inner = Ciboulette2PgSafeIdent::try_from(el.field().clone())?;
let table_field = Ciboulette2PgTableField::new(
Ciboulette2PgSafeIdentSelector::Single(talbe_field_inner.clone()),
None,
None,
);
Ok(Ciboulette2PgAdditionalField::new(
talbe_field_inner,
table_field,
Ciboulette2PgAdditionalFieldType::Sorting,
main_type,
))
}
}