busbar_sf_agentscript/graph/
nodes.rs1use serde::{Deserialize, Serialize};
4
5pub type Span = (usize, usize);
7
8#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
10pub enum RefNode {
11 StartAgent {
13 span: Span,
15 },
16
17 Topic {
19 name: String,
21 span: Span,
23 },
24
25 ActionDef {
27 name: String,
29 topic: String,
31 span: Span,
33 },
34
35 ReasoningAction {
37 name: String,
39 topic: String,
41 target: Option<String>,
43 span: Span,
45 },
46
47 Variable {
49 name: String,
51 mutable: bool,
53 span: Span,
55 },
56
57 Connection {
59 name: String,
61 span: Span,
63 },
64}
65
66impl RefNode {
67 pub fn label(&self) -> String {
69 match self {
70 RefNode::StartAgent { .. } => "start_agent".to_string(),
71 RefNode::Topic { name, .. } => format!("topic:{}", name),
72 RefNode::ActionDef { name, topic, .. } => format!("action:{}:{}", topic, name),
73 RefNode::ReasoningAction { name, topic, .. } => {
74 format!("reasoning:{}:{}", topic, name)
75 }
76 RefNode::Variable { name, .. } => format!("variable:{}", name),
77 RefNode::Connection { name, .. } => format!("connection:{}", name),
78 }
79 }
80
81 pub fn span(&self) -> Span {
83 match self {
84 RefNode::StartAgent { span }
85 | RefNode::Topic { span, .. }
86 | RefNode::ActionDef { span, .. }
87 | RefNode::ReasoningAction { span, .. }
88 | RefNode::Variable { span, .. }
89 | RefNode::Connection { span, .. } => *span,
90 }
91 }
92
93 pub fn name(&self) -> Option<&str> {
95 match self {
96 RefNode::StartAgent { .. } => None,
97 RefNode::Topic { name, .. }
98 | RefNode::ActionDef { name, .. }
99 | RefNode::ReasoningAction { name, .. }
100 | RefNode::Variable { name, .. }
101 | RefNode::Connection { name, .. } => Some(name),
102 }
103 }
104
105 pub fn is_topic(&self) -> bool {
107 matches!(self, RefNode::Topic { .. })
108 }
109
110 pub fn is_action_def(&self) -> bool {
112 matches!(self, RefNode::ActionDef { .. })
113 }
114
115 pub fn is_reasoning_action(&self) -> bool {
117 matches!(self, RefNode::ReasoningAction { .. })
118 }
119
120 pub fn is_variable(&self) -> bool {
122 matches!(self, RefNode::Variable { .. })
123 }
124}