whisky_pallas/wrapper/transaction_body/
pool_metadata.rs

1use std::str::FromStr;
2
3use pallas::{
4    codec::utils::Bytes,
5    ledger::primitives::{Fragment, PoolMetadata as PallasPoolMetadata},
6};
7use whisky_common::WError;
8
9pub struct PoolMetadata {
10    pub inner: PallasPoolMetadata,
11}
12
13impl PoolMetadata {
14    pub fn new(url: String, hash: String) -> Result<Self, WError> {
15        let hash_bytes = Bytes::from_str(&hash).map_err(|e| {
16            WError::new(
17                "WhiskyPallas - Creating PoolMetadata:",
18                &format!("Invalid hash hex: {}", e),
19            )
20        })?;
21        let inner = PallasPoolMetadata {
22            url,
23            hash: hash_bytes,
24        };
25        Ok(Self { inner })
26    }
27
28    pub fn encode(&self) -> Result<String, WError> {
29        let encoded_fragment = self
30            .inner
31            .encode_fragment()
32            .map_err(|e| WError::new("WhiskyPallas - PoolMetadata encode:", &e.to_string()))?;
33        Ok(hex::encode(encoded_fragment))
34    }
35
36    pub fn decode_bytes(bytes: &[u8]) -> Result<Self, WError> {
37        let inner = PallasPoolMetadata::decode_fragment(&bytes).map_err(|e| {
38            WError::new(
39                "WhiskyPallas - Creating PoolMetadata:",
40                &format!("Fragment decode error: {}", e),
41            )
42        })?;
43        Ok(Self { inner })
44    }
45}