raphtory-graphql 0.17.0

Raphtory GraphQL server
use crate::model::schema::{layer_schema::LayerSchema, node_schema::NodeSchema};
use dynamic_graphql::SimpleObject;
use itertools::Itertools;
use raphtory::{db::api::view::DynamicGraph, prelude::*};
use raphtory_storage::core_ops::CoreGraphOps;

#[derive(SimpleObject)]
pub(crate) struct GraphSchema {
    pub(crate) nodes: Vec<NodeSchema>,
    layers: Vec<LayerSchema<DynamicGraph>>,
}

impl GraphSchema {
    pub fn new(graph: &DynamicGraph) -> Self {
        let node_types = 0..graph.node_meta().node_type_meta().len();
        let nodes = node_types
            .map(|node_type| NodeSchema::new(node_type, graph.clone()))
            .collect();

        let layers = graph
            .unique_layers()
            .map(|layer_name| graph.layers(layer_name).unwrap().into())
            .collect_vec();

        GraphSchema { nodes, layers }
    }
}