codama_nodes/link_nodes/
link_node.rs1use 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}