use async_graphql::indexmap::IndexMap;
use p2panda_rs::schema::Schema;
use crate::graphql::client::dynamic_types::utils::{graphql_typename, metafield, metaobject};
pub fn type_name(schema: &Schema) -> String {
format!("{}Fields", schema.id())
}
pub struct DocumentFields(&'static Schema);
impl DocumentFields {
pub fn new(schema: &'static Schema) -> Self {
Self(schema)
}
pub fn type_name(&self) -> String {
type_name(self.0)
}
pub fn register_type(&self, registry: &mut async_graphql::registry::Registry) {
let mut fields = IndexMap::new();
self.0.fields().iter().for_each(|(field_name, field_type)| {
fields.insert(
field_name.to_string(),
metafield(field_name, None, &graphql_typename(field_type)),
);
});
registry.types.insert(
self.type_name(),
metaobject(
&self.type_name(),
Some("Data fields available on documents of this schema."),
fields,
),
);
}
}