pub mod bug_report;
pub mod capabilities;
pub mod connectivity;
pub mod debugging;
pub mod describe;
pub mod reporting;
pub mod schema_overview;
pub mod topics;
use crate::datatypes::values::Value;
use crate::graph::schema::DirGraph;
use std::collections::HashMap;
pub use connectivity::{compute_type_connectivity, derive_edge_counts_from_triples};
pub use describe::{compute_description, mcp_quickstart};
pub use schema_overview::{
compute_connection_type_stats, compute_neighbors_schema, compute_property_stats, compute_schema,
};
pub struct ConnectionTypeStats {
pub connection_type: String,
pub count: usize,
pub source_types: Vec<String>,
pub target_types: Vec<String>,
pub property_names: Vec<String>,
}
pub struct NodeTypeOverview {
pub count: usize,
pub properties: HashMap<String, String>,
}
pub struct SchemaOverview {
pub node_types: Vec<(String, NodeTypeOverview)>,
pub connection_types: Vec<ConnectionTypeStats>,
pub indexes: Vec<String>,
pub node_count: usize,
pub edge_count: usize,
}
pub struct PropertyStatInfo {
pub property_name: String,
pub type_string: String,
pub non_null: usize,
pub unique: usize,
pub values: Option<Vec<Value>>,
pub sample: Option<Value>,
}
#[derive(Clone)]
pub struct NeighborConnection {
pub connection_type: String,
pub other_type: String,
pub count: usize,
}
#[derive(Clone)]
pub struct NeighborsSchema {
pub outgoing: Vec<NeighborConnection>,
pub incoming: Vec<NeighborConnection>,
}
pub enum GraphScale {
Small,
Medium,
Large,
Extreme,
}
pub fn graph_scale(graph: &DirGraph) -> GraphScale {
let core_count = graph
.type_indices
.keys()
.filter(|nt| !graph.parent_types.contains_key(*nt))
.count();
match core_count {
0..=15 => GraphScale::Small,
16..=200 => GraphScale::Medium,
201..=5000 => GraphScale::Large,
_ => GraphScale::Extreme,
}
}
pub enum CypherDetail {
Off,
Overview,
Topics(Vec<String>),
}
pub enum FluentDetail {
Off,
Overview,
Topics(Vec<String>),
}
pub enum ConnectionDetail {
Off,
Overview,
Topics(Vec<String>),
}