use crate::{data_access_layer::BalanceIdentifier, tracking_copy::TrackingCopyError};
use casper_types::{Digest, ProtocolVersion, URefAddr};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BalanceIdentifierPurseRequest {
state_hash: Digest,
protocol_version: ProtocolVersion,
identifier: BalanceIdentifier,
}
impl BalanceIdentifierPurseRequest {
pub fn new(
state_hash: Digest,
protocol_version: ProtocolVersion,
identifier: BalanceIdentifier,
) -> Self {
BalanceIdentifierPurseRequest {
state_hash,
protocol_version,
identifier,
}
}
pub fn state_hash(&self) -> Digest {
self.state_hash
}
pub fn protocol_version(&self) -> ProtocolVersion {
self.protocol_version
}
pub fn identifier(&self) -> &BalanceIdentifier {
&self.identifier
}
}
#[derive(Debug, Clone)]
pub enum BalanceIdentifierPurseResult {
RootNotFound,
Success {
purse_addr: URefAddr,
},
Failure(TrackingCopyError),
}
impl BalanceIdentifierPurseResult {
pub fn purse_addr(&self) -> Option<URefAddr> {
match self {
BalanceIdentifierPurseResult::Success { purse_addr, .. } => Some(*purse_addr),
_ => None,
}
}
pub fn is_success(&self) -> bool {
match self {
BalanceIdentifierPurseResult::RootNotFound
| BalanceIdentifierPurseResult::Failure(_) => false,
BalanceIdentifierPurseResult::Success { .. } => true,
}
}
pub fn error(&self) -> Option<&TrackingCopyError> {
match self {
BalanceIdentifierPurseResult::RootNotFound
| BalanceIdentifierPurseResult::Success { .. } => None,
BalanceIdentifierPurseResult::Failure(err) => Some(err),
}
}
}
impl From<TrackingCopyError> for BalanceIdentifierPurseResult {
fn from(tce: TrackingCopyError) -> Self {
BalanceIdentifierPurseResult::Failure(tce)
}
}