cardano_sdk/cardano/
redeemer_pointer.rs

1//  This Source Code Form is subject to the terms of the Mozilla Public
2//  License, v. 2.0. If a copy of the MPL was not distributed with this
3//  file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5use crate::{cbor, pallas};
6use std::fmt;
7
8/// A mostly-internal type linking scripts redeemers with their targets.
9#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, cbor::Encode, cbor::Decode)]
10#[repr(transparent)]
11#[cbor(transparent)]
12pub struct RedeemerPointer(#[n(0)] pallas::RedeemersKey);
13
14impl fmt::Display for RedeemerPointer {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self.0.tag {
17            pallas_primitives::conway::RedeemerTag::Mint => write!(f, "Mint({})", self.0.index),
18            pallas_primitives::conway::RedeemerTag::Spend => write!(f, "Spend({})", self.0.index),
19            pallas_primitives::conway::RedeemerTag::Reward => {
20                write!(f, "Withdraw({})", self.0.index)
21            }
22            pallas_primitives::conway::RedeemerTag::Cert => write!(f, "Publish({})", self.0.index),
23            pallas_primitives::conway::RedeemerTag::Vote => write!(f, "Vote({})", self.0.index),
24            pallas_primitives::conway::RedeemerTag::Propose => {
25                write!(f, "Propose({})", self.0.index)
26            }
27        }
28    }
29}
30
31// --------------------------------------------------------------------- Building
32
33impl RedeemerPointer {
34    pub fn from_mint(index: u32) -> Self {
35        RedeemerPointer(pallas::RedeemersKey {
36            tag: pallas::RedeemerTag::Mint,
37            index,
38        })
39    }
40
41    pub fn from_spend(index: u32) -> Self {
42        RedeemerPointer(pallas::RedeemersKey {
43            tag: pallas::RedeemerTag::Spend,
44            index,
45        })
46    }
47    pub fn from_withdraw(index: u32) -> Self {
48        RedeemerPointer(pallas::RedeemersKey {
49            tag: pallas::RedeemerTag::Reward,
50            index,
51        })
52    }
53
54    pub fn from_publish(index: u32) -> Self {
55        RedeemerPointer(pallas::RedeemersKey {
56            tag: pallas::RedeemerTag::Cert,
57            index,
58        })
59    }
60
61    pub fn from_vote(index: u32) -> Self {
62        RedeemerPointer(pallas::RedeemersKey {
63            tag: pallas::RedeemerTag::Vote,
64            index,
65        })
66    }
67
68    pub fn from_propose(index: u32) -> Self {
69        RedeemerPointer(pallas::RedeemersKey {
70            tag: pallas::RedeemerTag::Propose,
71            index,
72        })
73    }
74}
75
76// ------------------------------------------------------------ Converting (from)
77
78impl From<pallas::RedeemersKey> for RedeemerPointer {
79    fn from(key: pallas::RedeemersKey) -> Self {
80        Self(key)
81    }
82}
83
84// -------------------------------------------------------------- Converting (to)
85
86impl From<RedeemerPointer> for pallas::RedeemersKey {
87    fn from(ptr: RedeemerPointer) -> Self {
88        ptr.0
89    }
90}