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 { 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 { match self { MultiEraRedeemer::AlonzoCompatible(x) => minicbor::to_vec(x).unwrap(), MultiEraRedeemer::Conway(k, v) => minicbor::to_vec((k, v)).unwrap(), } } }