casper_storage/data_access_layer/
balance_identifier_purse.rs1use crate::{data_access_layer::BalanceIdentifier, tracking_copy::TrackingCopyError};
2use casper_types::{Digest, ProtocolVersion, URefAddr};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct BalanceIdentifierPurseRequest {
7 state_hash: Digest,
8 protocol_version: ProtocolVersion,
9 identifier: BalanceIdentifier,
10}
11
12impl BalanceIdentifierPurseRequest {
13 pub fn new(
15 state_hash: Digest,
16 protocol_version: ProtocolVersion,
17 identifier: BalanceIdentifier,
18 ) -> Self {
19 BalanceIdentifierPurseRequest {
20 state_hash,
21 protocol_version,
22 identifier,
23 }
24 }
25
26 pub fn state_hash(&self) -> Digest {
28 self.state_hash
29 }
30
31 pub fn protocol_version(&self) -> ProtocolVersion {
33 self.protocol_version
34 }
35
36 pub fn identifier(&self) -> &BalanceIdentifier {
38 &self.identifier
39 }
40}
41
42#[derive(Debug, Clone)]
44pub enum BalanceIdentifierPurseResult {
45 RootNotFound,
47 Success {
49 purse_addr: URefAddr,
51 },
52 Failure(TrackingCopyError),
54}
55
56impl BalanceIdentifierPurseResult {
57 pub fn purse_addr(&self) -> Option<URefAddr> {
59 match self {
60 BalanceIdentifierPurseResult::Success { purse_addr, .. } => Some(*purse_addr),
61 _ => None,
62 }
63 }
64
65 pub fn is_success(&self) -> bool {
67 match self {
68 BalanceIdentifierPurseResult::RootNotFound
69 | BalanceIdentifierPurseResult::Failure(_) => false,
70 BalanceIdentifierPurseResult::Success { .. } => true,
71 }
72 }
73
74 pub fn error(&self) -> Option<&TrackingCopyError> {
76 match self {
77 BalanceIdentifierPurseResult::RootNotFound
78 | BalanceIdentifierPurseResult::Success { .. } => None,
79 BalanceIdentifierPurseResult::Failure(err) => Some(err),
80 }
81 }
82}
83
84impl From<TrackingCopyError> for BalanceIdentifierPurseResult {
85 fn from(tce: TrackingCopyError) -> Self {
86 BalanceIdentifierPurseResult::Failure(tce)
87 }
88}