use code_ranker_plugin_api::{
attrs::AttrValue,
edge::Edge,
level::{AttributeGroup, AttributeSpec, CycleKindSpec, EdgeKindSpec, Grouping, NodeKindSpec},
node::{Node, NodeId},
};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LevelUi {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default_sort: Option<String>,
pub sort_metrics: Vec<String>,
pub size_metrics: Vec<String>,
pub card_metrics: Vec<String>,
pub columns: Vec<String>,
pub summary_metrics: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub grouping: Option<Grouping>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CycleGroup {
pub kind: String,
pub nodes: Vec<NodeId>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LevelGraph {
pub edge_kinds: BTreeMap<String, EdgeKindSpec>,
pub node_attributes: BTreeMap<String, AttributeSpec>,
pub edge_attributes: BTreeMap<String, AttributeSpec>,
pub attribute_groups: BTreeMap<String, AttributeGroup>,
pub node_kinds: BTreeMap<String, NodeKindSpec>,
pub cycle_kinds: BTreeMap<String, CycleKindSpec>,
pub nodes: Vec<Node>,
pub edges: Vec<Edge>,
pub cycles: Vec<CycleGroup>,
pub stats: BTreeMap<String, AttrValue>,
pub ui: LevelUi,
}