whisky_pallas/wrapper/witness_set/
plutus_data.rs1use pallas::ledger::primitives::{conway::PlutusData as PallasPlutusData, Fragment};
2use whisky_common::WError;
3
4#[derive(Debug, Clone)]
5pub struct PlutusData {
6 pub inner: PallasPlutusData,
7}
8
9impl PlutusData {
10 pub fn new(plutus_data_hex: String) -> Result<Self, WError> {
11 let bytes = hex::decode(&plutus_data_hex).map_err(|e| {
12 WError::new(
13 "WhiskyPallas - Creating Plutus data:",
14 &format!("Hex decode error: {} for {}", e, &plutus_data_hex),
15 )
16 })?;
17 let inner = PallasPlutusData::decode_fragment(&bytes).map_err(|e| {
18 WError::new(
19 "WhiskyPallas - Creating Plutus data:",
20 &format!("Fragment decode error: {} for {}", e, plutus_data_hex),
21 )
22 })?;
23 Ok(Self { inner })
24 }
25
26 pub fn encode(&self) -> Result<String, WError> {
27 self.inner
28 .encode_fragment()
29 .map(|bytes| hex::encode(bytes))
30 .map_err(|_| {
31 WError::new(
32 "WhiskyPallas - Encoding Plutus data:",
33 "Failed to encode fragment",
34 )
35 })
36 }
37
38 pub fn decode_bytes(bytes: &[u8]) -> Result<Self, WError> {
39 let inner = PallasPlutusData::decode_fragment(&bytes).map_err(|e| {
40 WError::new(
41 "WhiskyPallas - Decoding Plutus data:",
42 &format!("Fragment decode error: {}", e.to_string()),
43 )
44 })?;
45 Ok(Self { inner })
46 }
47}