use std::{fmt, str::FromStr};
pub enum BuiltinAccounts {
ClockAccount,
SystemAccount,
AssociatedTokenProgram,
RentAccount,
TokenProgramId,
DataAccount,
InstructionAccount,
}
impl BuiltinAccounts {
pub fn as_str(&self) -> &'static str {
match self {
BuiltinAccounts::ClockAccount => "clock",
BuiltinAccounts::SystemAccount => "systemProgram",
BuiltinAccounts::AssociatedTokenProgram => "associatedTokenProgram",
BuiltinAccounts::RentAccount => "rent",
BuiltinAccounts::TokenProgramId => "tokenProgram",
BuiltinAccounts::DataAccount => "dataAccount",
BuiltinAccounts::InstructionAccount => "SysvarInstruction",
}
}
}
impl fmt::Display for BuiltinAccounts {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
impl FromStr for BuiltinAccounts {
type Err = ();
fn from_str(str: &str) -> Result<Self, Self::Err> {
let account = match str {
"clock" => BuiltinAccounts::ClockAccount,
"systemProgram" => BuiltinAccounts::SystemAccount,
"associatedTokenProgram" => BuiltinAccounts::AssociatedTokenProgram,
"rent" => BuiltinAccounts::RentAccount,
"tokenProgram" => BuiltinAccounts::TokenProgramId,
"dataAccount" => BuiltinAccounts::DataAccount,
"SysvarInstruction" => BuiltinAccounts::InstructionAccount,
_ => return Err(()),
};
Ok(account)
}
}
impl PartialEq<BuiltinAccounts> for &String {
fn eq(&self, other: &BuiltinAccounts) -> bool {
*self == &other.to_string()
}
}
impl PartialEq<BuiltinAccounts> for String {
fn eq(&self, other: &BuiltinAccounts) -> bool {
self == &other.to_string()
}
}