rush_ecs_svm/state/
instance.rs1use borsh::{BorshDeserialize, BorshSerialize};
2use rush_ecs_core::blueprint::{Component, ComponentValue};
3use shank::ShankAccount;
4use solana_program::pubkey::Pubkey;
5use spl_discriminator::{ArrayDiscriminator, SplDiscriminate};
6use std::collections::BTreeMap;
7
8#[derive(
13 Clone,
14 BorshSerialize,
15 BorshDeserialize,
16 Debug,
17 Default,
18 Eq,
19 PartialEq,
20 ShankAccount,
21 SplDiscriminate,
22)]
23#[discriminator_hash_input("rush_ecs_store::state::Instance")]
24pub struct Instance {
25 pub discriminator: [u8; 8],
27
28 pub components: BTreeMap<Component, ComponentValue>,
30 pub nonce: u64,
32 pub instance_authority: Pubkey,
35
36 pub bump: u8,
38}
39
40impl Instance {
41 pub fn new(
43 components: BTreeMap<Component, ComponentValue>,
44 nonce: u64,
45 instance_authority: Pubkey,
46 bump: u8,
47 ) -> Self {
48 Self {
49 components,
50 nonce,
51 instance_authority,
52 bump,
53 discriminator: Self::SPL_DISCRIMINATOR.into(),
54 }
55 }
56
57 pub fn is_initialized(&self) -> bool {
59 self.discriminator.as_slice() == Instance::SPL_DISCRIMINATOR_SLICE
60 }
61
62 pub fn is_uninitialized(&self) -> bool {
64 self.discriminator.as_slice() == ArrayDiscriminator::UNINITIALIZED.as_slice()
65 }
66}