use crate::schema::{
datum::{Datum, DatumDiscriminator},
entity::{Entity, EntityVisitor},
relation::Relation,
};
use super::EntityPart;
pub fn is_relation<EP: EntityPart>() -> bool {
struct Checker(bool);
impl DatumDiscriminator for Checker {
fn visit_entity_id<E: Entity>(&mut self) {}
fn visit_serialized<T: serde::Serialize + serde::de::DeserializeOwned>(&mut self) {}
fn visit_bare_field<T: Datum>(&mut self) {}
fn visit_relation_map<E: Entity>(&mut self) {
self.0 = true;
}
fn visit_relation_range<R: Relation>(&mut self) {
self.0 = true;
}
fn visit_relation_domain<R: Relation>(&mut self) {
self.0 = true;
}
}
impl EntityVisitor for Checker {
fn visit<E: Entity>(&mut self) {
self.0 = true;
}
}
let mut checker = Checker(false);
<EP::Datum as Datum>::accept_discriminator(&mut checker);
checker.0
}