plutus_ledger_api/v1/
redeemer.rs1use std::borrow::Cow;
4
5use cardano_serialization_lib as csl;
6
7#[cfg(feature = "lbf")]
8use lbr_prelude::json::Json;
9#[cfg(feature = "serde")]
10use serde::{Deserialize, Serialize};
11
12use crate as plutus_ledger_api;
13use crate::csl::pla_to_csl::{TryFromPLA, TryFromPLAError, TryToCSL};
14use crate::plutus_data::{IsPlutusData, PlutusData};
15use crate::v1::crypto::LedgerBytes;
16
17#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, IsPlutusData)]
24#[is_plutus_data_derive_strategy = "Newtype"]
25#[cfg_attr(feature = "lbf", derive(Json))]
26#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27pub struct Redeemer(pub PlutusData);
28
29impl Redeemer {
30 pub fn with_extra_info<'a>(
31 &'a self,
32 tag: csl::RedeemerTag,
33 index: u64,
34 ) -> RedeemerWithExtraInfo<'a> {
35 RedeemerWithExtraInfo {
36 redeemer: Cow::Borrowed(self),
37 tag,
38 index,
39 }
40 }
41}
42
43#[derive(Clone, Debug)]
44pub struct RedeemerWithExtraInfo<'a> {
45 pub redeemer: Cow<'a, Redeemer>,
46 pub tag: csl::RedeemerTag,
47 pub index: u64,
48}
49
50impl TryFromPLA<RedeemerWithExtraInfo<'_>> for csl::Redeemer {
51 fn try_from_pla<'a>(val: &RedeemerWithExtraInfo<'_>) -> Result<csl::Redeemer, TryFromPLAError> {
52 let Redeemer(plutus_data) = val.redeemer.as_ref();
53 Ok(csl::Redeemer::new(
54 &val.tag,
55 &val.index.try_to_csl()?,
56 &plutus_data.try_to_csl()?,
57 &csl::ExUnits::new(&csl::BigNum::from(0u64), &csl::BigNum::from(0u64)),
58 ))
59 }
60}
61
62#[derive(Clone, Debug, PartialEq, Eq, IsPlutusData)]
68#[is_plutus_data_derive_strategy = "Newtype"]
69#[cfg_attr(feature = "lbf", derive(Json))]
70#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
71pub struct RedeemerHash(pub LedgerBytes);