whisky_pallas/wrapper/witness_set/
plutus_data.rs

1use 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}