casper_storage/data_access_layer/
seigniorage_recipients.rs

1//! Support for querying seigniorage recipients.
2
3use crate::tracking_copy::TrackingCopyError;
4use casper_types::{system::auction::SeigniorageRecipientsSnapshot, Digest};
5use std::fmt::{Display, Formatter};
6
7/// Request for seigniorage recipients.
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct SeigniorageRecipientsRequest {
10    state_hash: Digest,
11}
12
13impl SeigniorageRecipientsRequest {
14    /// Constructs a new SeigniorageRecipientsRequest.
15    pub fn new(state_hash: Digest) -> Self {
16        SeigniorageRecipientsRequest { state_hash }
17    }
18
19    /// Get the state hash.
20    pub fn state_hash(&self) -> Digest {
21        self.state_hash
22    }
23}
24
25/// Result enum that represents all possible outcomes of a seignorage recipients request.
26#[derive(Debug)]
27pub enum SeigniorageRecipientsResult {
28    /// Returned if auction is not found. This is a catastrophic outcome.
29    AuctionNotFound,
30    /// Returned if a passed state root hash is not found. This is recoverable.
31    RootNotFound,
32    /// Value not found. This is not erroneous if the record does not exist.
33    ValueNotFound(String),
34    /// There is no systemic issue, but the query itself errored.
35    Failure(TrackingCopyError),
36    /// The query succeeded.
37    Success {
38        /// Seigniorage recipients.
39        seigniorage_recipients: SeigniorageRecipientsSnapshot,
40    },
41}
42
43impl SeigniorageRecipientsResult {
44    /// Returns true if success.
45    pub fn is_success(&self) -> bool {
46        matches!(self, SeigniorageRecipientsResult::Success { .. })
47    }
48
49    /// Takes seigniorage recipients.
50    pub fn into_option(self) -> Option<SeigniorageRecipientsSnapshot> {
51        match self {
52            SeigniorageRecipientsResult::AuctionNotFound
53            | SeigniorageRecipientsResult::RootNotFound
54            | SeigniorageRecipientsResult::ValueNotFound(_)
55            | SeigniorageRecipientsResult::Failure(_) => None,
56            SeigniorageRecipientsResult::Success {
57                seigniorage_recipients,
58            } => Some(seigniorage_recipients),
59        }
60    }
61}
62
63impl Display for SeigniorageRecipientsResult {
64    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
65        match self {
66            SeigniorageRecipientsResult::AuctionNotFound => write!(f, "system auction not found"),
67            SeigniorageRecipientsResult::RootNotFound => write!(f, "state root not found"),
68            SeigniorageRecipientsResult::ValueNotFound(msg) => {
69                write!(f, "value not found: {}", msg)
70            }
71            SeigniorageRecipientsResult::Failure(tce) => write!(f, "{}", tce),
72            SeigniorageRecipientsResult::Success { .. } => {
73                write!(f, "success")
74            }
75        }
76    }
77}