pyth_price_store/accounts/
errors.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum ReadAccountError {
5    #[error("data too short")]
6    DataTooShort,
7    #[error("format mismatch")]
8    FormatMismatch,
9    #[error("already initialized")]
10    AlreadyInitialized,
11    #[error("invalid num prices")]
12    InvalidNumPrices,
13}
14
15#[derive(Debug, Error)]
16#[error("publisher price data overflow")]
17pub struct PublisherPriceError;
18
19#[derive(Debug, Error)]
20pub enum ExtendError {
21    #[error("not enough space")]
22    NotEnoughSpace,
23    #[error("invalid length")]
24    InvalidLength,
25}
26
27#[cfg(feature = "solana-program")]
28mod convert {
29    use {
30        super::*,
31        solana_program::program_error::ProgramError,
32    };
33
34    impl From<ReadAccountError> for ProgramError {
35        fn from(value: ReadAccountError) -> Self {
36            match value {
37                ReadAccountError::DataTooShort => ProgramError::AccountDataTooSmall,
38                ReadAccountError::FormatMismatch => ProgramError::InvalidAccountData,
39                ReadAccountError::AlreadyInitialized => ProgramError::AccountAlreadyInitialized,
40                ReadAccountError::InvalidNumPrices => ProgramError::InvalidAccountData,
41            }
42        }
43    }
44
45    impl From<PublisherPriceError> for ProgramError {
46        fn from(_value: PublisherPriceError) -> Self {
47            ProgramError::AccountDataTooSmall
48        }
49    }
50
51    impl From<ExtendError> for ProgramError {
52        fn from(value: ExtendError) -> Self {
53            match value {
54                ExtendError::NotEnoughSpace => ProgramError::AccountDataTooSmall,
55                ExtendError::InvalidLength => ProgramError::InvalidInstructionData,
56            }
57        }
58    }
59}