whisky_csl/tx_parser/
metadata.rs1use cardano_serialization_lib as csl;
2use whisky_common::{Metadata, WError};
3
4use super::CSLParser;
5
6impl CSLParser {
7 pub fn get_metadata(&self) -> &Vec<Metadata> {
8 &self.tx_body.metadata
9 }
10
11 pub(super) fn extract_metadata(&mut self) -> Result<(), WError> {
12 if let Some(aux_data) = &self.csl_aux_data {
13 self.tx_body.metadata = csl_aux_data_to_metadata(&aux_data)?;
14 }
15 Ok(())
16 }
17}
18
19fn csl_aux_data_to_metadata(aux_data: &csl::AuxiliaryData) -> Result<Vec<Metadata>, WError> {
20 let metadata = aux_data.metadata();
21 let csl_metadata_list = metadata.unwrap_or(csl::GeneralTransactionMetadata::new());
22 let keys = csl_metadata_list.keys();
23 let metadata_list_len = keys.len();
24 let mut metadata_list = Vec::new();
25 for i in 0..metadata_list_len {
26 let key = keys.get(i);
27 let metadata = csl_metadata_list
28 .get(&key)
29 .ok_or_else(|| WError::new("csl_aux_data_to_metadata", "Failed to get metadata"))?;
30 let metadata = Metadata {
31 tag: key.to_string(),
32 metadata: csl::decode_metadatum_to_json_str(
33 &metadata,
34 csl::MetadataJsonSchema::NoConversions,
35 )
36 .map_err(|e| {
37 WError::new(
38 "csl_aux_data_to_metadata",
39 &format!("Failed to decode metadata: {:?}", e),
40 )
41 })?,
42 };
43 metadata_list.push(metadata);
44 }
45 Ok(metadata_list)
46}