1use crate::model::EdgeKind;
2
3#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
5pub struct Node {
6 pub id: String,
7 pub name: String,
8 pub kind: String,
9 pub repo: String,
10 pub location: String,
12 pub signature: Option<String>,
13}
14
15#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
17pub struct FlowStep {
18 pub node: Node,
19 pub depth: usize,
20 pub via: String,
21 pub from: String,
22}
23
24#[derive(Debug, Clone, serde::Serialize)]
26pub struct Hop {
27 pub node: Node,
28 pub depth: usize,
29 pub via: EdgeKind,
30}
31
32#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
34pub struct Zoom {
35 pub focus: Option<Node>,
36 pub container: Option<Node>,
37 pub members: Vec<Node>,
38 pub callers: Vec<Node>,
39 pub callees: Vec<Node>,
40 pub importers: Vec<Node>,
41 pub contracts: Vec<ContractRole>,
43 pub providers: Vec<Node>,
45 pub consumers: Vec<Node>,
46}
47
48#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
50pub struct ContractRole {
51 pub role: EdgeKind,
52 pub contract: Node,
53 pub counterparts: Vec<Node>,
54}
55
56#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
58pub struct ContractView {
59 pub contract: Node,
60 pub providers: Vec<Node>,
61 pub consumers: Vec<Node>,
62}
63
64pub const CONTRACTS: &str = "_contracts";