101 lines
3 KiB
Rust
101 lines
3 KiB
Rust
use std::borrow::Cow;
|
|
|
|
use pallas_codec::minicbor;
|
|
use pallas_primitives::{alonzo, conway};
|
|
|
|
use crate::MultiEraRedeemer;
|
|
|
|
impl<'b> MultiEraRedeemer<'b> {
|
|
pub fn tag(&self) -> conway::RedeemerTag {
|
|
match &self {
|
|
Self::AlonzoCompatible(x) => match x.tag {
|
|
alonzo::RedeemerTag::Cert => conway::RedeemerTag::Cert,
|
|
alonzo::RedeemerTag::Spend => conway::RedeemerTag::Spend,
|
|
alonzo::RedeemerTag::Mint => conway::RedeemerTag::Mint,
|
|
alonzo::RedeemerTag::Reward => conway::RedeemerTag::Reward,
|
|
},
|
|
Self::Conway(x, _) => x.tag,
|
|
}
|
|
}
|
|
|
|
pub fn data(&self) -> &alonzo::PlutusData {
|
|
match &self {
|
|
Self::AlonzoCompatible(x) => &x.data,
|
|
Self::Conway(_, x) => &x.data,
|
|
}
|
|
}
|
|
|
|
pub fn ex_units(&self) -> alonzo::ExUnits {
|
|
match &self {
|
|
Self::AlonzoCompatible(x) => x.ex_units,
|
|
Self::Conway(_, x) => x.ex_units,
|
|
}
|
|
}
|
|
|
|
pub fn index(&self) -> u32 {
|
|
match self {
|
|
Self::AlonzoCompatible(x) => x.index,
|
|
Self::Conway(x, _) => x.index,
|
|
}
|
|
}
|
|
|
|
pub fn as_alonzo(&self) -> Option<&alonzo::Redeemer> {
|
|
match self {
|
|
Self::AlonzoCompatible(x) => Some(x),
|
|
Self::Conway(..) => None,
|
|
}
|
|
}
|
|
|
|
pub fn as_conway(&self) -> Option<(&conway::RedeemersKey, &conway::RedeemersValue)> {
|
|
match self {
|
|
Self::AlonzoCompatible(_) => None,
|
|
Self::Conway(x, y) => Some((x, y)),
|
|
}
|
|
}
|
|
|
|
pub fn into_conway_deprecated(&self) -> Option<conway::Redeemer> {
|
|
match self {
|
|
Self::AlonzoCompatible(_) => None,
|
|
Self::Conway(x, y) => Some(conway::Redeemer {
|
|
tag: x.tag,
|
|
index: x.index,
|
|
data: y.data.clone(),
|
|
ex_units: y.ex_units,
|
|
}),
|
|
}
|
|
}
|
|
|
|
pub fn from_alonzo_compatible(redeemer: &'b alonzo::Redeemer) -> Self {
|
|
Self::AlonzoCompatible(Box::new(Cow::Borrowed(redeemer)))
|
|
}
|
|
|
|
pub fn from_conway(
|
|
redeemers_key: &'b conway::RedeemersKey,
|
|
redeemers_val: &'b conway::RedeemersValue,
|
|
) -> Self {
|
|
Self::Conway(
|
|
Box::new(Cow::Borrowed(redeemers_key)),
|
|
Box::new(Cow::Borrowed(redeemers_val)),
|
|
)
|
|
}
|
|
|
|
pub fn from_conway_deprecated(redeemer: &'b conway::Redeemer) -> Self {
|
|
Self::Conway(
|
|
Box::new(Cow::Owned(conway::RedeemersKey {
|
|
tag: redeemer.tag,
|
|
index: redeemer.index,
|
|
})),
|
|
Box::new(Cow::Owned(conway::RedeemersValue {
|
|
data: redeemer.data.clone(),
|
|
ex_units: redeemer.ex_units,
|
|
})),
|
|
)
|
|
}
|
|
|
|
pub fn encode(&self) -> Vec<u8> {
|
|
match self {
|
|
MultiEraRedeemer::AlonzoCompatible(x) => minicbor::to_vec(x).unwrap(),
|
|
MultiEraRedeemer::Conway(k, v) => minicbor::to_vec((k, v)).unwrap(),
|
|
}
|
|
}
|
|
}
|