codama_nodes/link_nodes/
link_node.rs

1use crate::{
2    AccountLinkNode, CamelCaseString, DefinedTypeLinkNode, HasName, InstructionAccountLinkNode,
3    InstructionArgumentLinkNode, InstructionLinkNode, PdaLinkNode, ProgramLinkNode,
4};
5use codama_nodes_derive::node_union;
6
7#[node_union]
8pub enum LinkNode {
9    Account(AccountLinkNode),
10    DefinedType(DefinedTypeLinkNode),
11    Instruction(InstructionLinkNode),
12    InstructionAccount(InstructionAccountLinkNode),
13    InstructionArgument(InstructionArgumentLinkNode),
14    Pda(PdaLinkNode),
15    Program(ProgramLinkNode),
16}
17
18impl HasName for LinkNode {
19    fn name(&self) -> &CamelCaseString {
20        match self {
21            LinkNode::Account(node) => node.name(),
22            LinkNode::DefinedType(node) => node.name(),
23            LinkNode::Instruction(node) => node.name(),
24            LinkNode::InstructionAccount(node) => node.name(),
25            LinkNode::InstructionArgument(node) => node.name(),
26            LinkNode::Pda(node) => node.name(),
27            LinkNode::Program(node) => node.name(),
28        }
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35    use crate::HasKind;
36
37    #[test]
38    fn kind() {
39        let node: LinkNode = ProgramLinkNode::new("myProgram").into();
40        assert_eq!(node.kind(), "programLinkNode");
41    }
42}