use crate::tracking_copy::TrackingCopyError;
use casper_types::{system::auction::SeigniorageRecipientsSnapshot, Digest};
use std::fmt::{Display, Formatter};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SeigniorageRecipientsRequest {
state_hash: Digest,
}
impl SeigniorageRecipientsRequest {
pub fn new(state_hash: Digest) -> Self {
SeigniorageRecipientsRequest { state_hash }
}
pub fn state_hash(&self) -> Digest {
self.state_hash
}
}
#[derive(Debug)]
pub enum SeigniorageRecipientsResult {
AuctionNotFound,
RootNotFound,
ValueNotFound(String),
Failure(TrackingCopyError),
Success {
seigniorage_recipients: SeigniorageRecipientsSnapshot,
},
}
impl SeigniorageRecipientsResult {
pub fn is_success(&self) -> bool {
matches!(self, SeigniorageRecipientsResult::Success { .. })
}
pub fn into_option(self) -> Option<SeigniorageRecipientsSnapshot> {
match self {
SeigniorageRecipientsResult::AuctionNotFound
| SeigniorageRecipientsResult::RootNotFound
| SeigniorageRecipientsResult::ValueNotFound(_)
| SeigniorageRecipientsResult::Failure(_) => None,
SeigniorageRecipientsResult::Success {
seigniorage_recipients,
} => Some(seigniorage_recipients),
}
}
}
impl Display for SeigniorageRecipientsResult {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
SeigniorageRecipientsResult::AuctionNotFound => write!(f, "system auction not found"),
SeigniorageRecipientsResult::RootNotFound => write!(f, "state root not found"),
SeigniorageRecipientsResult::ValueNotFound(msg) => {
write!(f, "value not found: {}", msg)
}
SeigniorageRecipientsResult::Failure(tce) => write!(f, "{}", tce),
SeigniorageRecipientsResult::Success { .. } => {
write!(f, "success")
}
}
}
}