use crate::{
CamelCaseString, DiscriminatorNode, Docs, HasName, InstructionAccountNode,
InstructionArgumentNode, InstructionByteDeltaNode, InstructionRemainingAccountsNode,
InstructionStatusNode, OptionalAccountStrategy,
};
use codama_nodes_derive::node;
#[node]
#[derive(Default)]
pub struct InstructionNode {
pub name: CamelCaseString,
#[serde(default, skip_serializing_if = "crate::is_default")]
pub docs: Docs,
#[serde(skip_serializing_if = "crate::is_default")]
pub optional_account_strategy: Option<OptionalAccountStrategy>,
pub accounts: Vec<InstructionAccountNode>,
pub arguments: Vec<InstructionArgumentNode>,
#[serde(default, skip_serializing_if = "crate::is_default")]
pub extra_arguments: Vec<InstructionArgumentNode>,
#[serde(default, skip_serializing_if = "crate::is_default")]
pub remaining_accounts: Vec<InstructionRemainingAccountsNode>,
#[serde(default, skip_serializing_if = "crate::is_default")]
pub byte_deltas: Vec<InstructionByteDeltaNode>,
#[serde(default, skip_serializing_if = "crate::is_default")]
pub discriminators: Vec<DiscriminatorNode>,
#[serde(skip_serializing_if = "crate::is_default")]
pub status: Option<InstructionStatusNode>,
#[serde(default, skip_serializing_if = "crate::is_default")]
pub sub_instructions: Vec<InstructionNode>,
}
impl HasName for InstructionNode {
fn name(&self) -> &CamelCaseString {
&self.name
}
}