use crate::{account_set::AccountSetValidate, prelude::*};
pub mod init;
pub mod mutable;
pub mod seeded;
pub mod signer;
pub use init::*;
pub use mutable::*;
pub use seeded::*;
pub use signer::*;
pub trait SignedAccount: SingleAccountSet {
fn signer_seeds(&self) -> Option<Vec<&[u8]>>;
}
pub trait WritableAccount: SingleAccountSet {}
pub trait HasInnerType {
type Inner: ?Sized + 'static;
}
pub trait HasOwnerProgram {
type OwnerProgram: StarFrameProgram;
}
pub type OwnerProgramDiscriminant<T> =
<<T as HasOwnerProgram>::OwnerProgram as StarFrameProgram>::AccountDiscriminant;
pub trait HasSeeds {
type Seeds: GetSeeds;
}
pub trait CanInitSeeds<A>: SingleAccountSet + AccountSetValidate<A> {
#[rust_analyzer::completions(ignore_flyimport)]
fn init_seeds(&mut self, arg: &A, ctx: &Context) -> Result<()>;
}
pub trait CanInitAccount<A>: SingleAccountSet {
#[rust_analyzer::completions(ignore_flyimport)]
fn init_account<const IF_NEEDED: bool>(
&mut self,
arg: A,
account_seeds: Option<&[&[u8]]>,
ctx: &Context,
) -> Result<bool>;
}