Skip to content

Commit 1943002

Browse files
committed
add ToStr trait
1 parent 3ba3d84 commit 1943002

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

program-error/src/lib.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,57 @@ impl From<ProgramError> for u64 {
250250
}
251251
}
252252

253+
/// A trait for converting a program error to a `&str`.
254+
pub trait ToStr {
255+
fn to_str<E>(&self) -> &'static str
256+
where
257+
E: 'static + ToStr + TryFrom<u32>;
258+
}
259+
260+
impl ToStr for ProgramError {
261+
fn to_str<E>(&self) -> &'static str
262+
where
263+
E: 'static + ToStr + TryFrom<u32>,
264+
{
265+
match self {
266+
Self::Custom(error) => {
267+
if let Ok(custom_error) = E::try_from(*error) {
268+
custom_error.to_str::<E>()
269+
} else {
270+
"Error: Unknown"
271+
}
272+
}
273+
Self::InvalidArgument => "Error: InvalidArgument",
274+
Self::InvalidInstructionData => "Error: InvalidInstructionData",
275+
Self::InvalidAccountData => "Error: InvalidAccountData",
276+
Self::AccountDataTooSmall => "Error: AccountDataTooSmall",
277+
Self::InsufficientFunds => "Error: InsufficientFunds",
278+
Self::IncorrectProgramId => "Error: IncorrectProgramId",
279+
Self::MissingRequiredSignature => "Error: MissingRequiredSignature",
280+
Self::AccountAlreadyInitialized => "Error: AccountAlreadyInitialized",
281+
Self::UninitializedAccount => "Error: UninitializedAccount",
282+
Self::NotEnoughAccountKeys => "Error: NotEnoughAccountKeys",
283+
Self::AccountBorrowFailed => "Error: AccountBorrowFailed",
284+
Self::MaxSeedLengthExceeded => "Error: MaxSeedLengthExceeded",
285+
Self::InvalidSeeds => "Error: InvalidSeeds",
286+
Self::BorshIoError => "Error: BorshIoError",
287+
Self::AccountNotRentExempt => "Error: AccountNotRentExempt",
288+
Self::UnsupportedSysvar => "Error: UnsupportedSysvar",
289+
Self::IllegalOwner => "Error: IllegalOwner",
290+
Self::MaxAccountsDataAllocationsExceeded => "Error: MaxAccountsDataAllocationsExceeded",
291+
Self::InvalidRealloc => "Error: InvalidRealloc",
292+
Self::MaxInstructionTraceLengthExceeded => "Error: MaxInstructionTraceLengthExceeded",
293+
Self::BuiltinProgramsMustConsumeComputeUnits => {
294+
"Error: BuiltinProgramsMustConsumeComputeUnits"
295+
}
296+
Self::InvalidAccountOwner => "Error: InvalidAccountOwner",
297+
Self::ArithmeticOverflow => "Error: ArithmeticOverflow",
298+
Self::Immutable => "Error: Immutable",
299+
Self::IncorrectAuthority => "Error: IncorrectAuthority",
300+
}
301+
}
302+
}
303+
253304
impl From<u64> for ProgramError {
254305
fn from(error: u64) -> Self {
255306
match error {

0 commit comments

Comments
 (0)