whisky_csl/tx_parser/
parsable.rs

1use whisky_common::{TxBuilderBody, TxParsable, TxTester, UTxO, UtxoInput, WError};
2
3use crate::WhiskyCSL;
4
5use super::CSLParser;
6
7impl TxParsable for WhiskyCSL {
8    fn parse(&mut self, tx_hex: &str, resolved_utxos: &[UTxO]) -> Result<(), WError> {
9        let mut parser = CSLParser::new();
10        parser.parse(tx_hex, resolved_utxos)?;
11        self.parser = parser;
12        Ok(())
13    }
14
15    fn get_required_inputs(&mut self, tx_hex: &str) -> Result<Vec<UtxoInput>, WError> {
16        let required_inputs = CSLParser::extract_all_required_utxo_input(tx_hex)
17            .map_err(WError::from_err("WhiskyCSL - get_required_inputs"))?;
18        Ok(required_inputs)
19    }
20
21    fn get_builder_body(&self) -> TxBuilderBody {
22        self.parser.tx_body.clone()
23    }
24
25    fn get_builder_body_without_change(&self) -> TxBuilderBody {
26        let mut tx_body = self.parser.tx_body.clone();
27        let outputs = self.parser.csl_tx_body.outputs();
28        let outputs_len = outputs.len();
29        if outputs_len > 0 {
30            tx_body.outputs.pop();
31        }
32        tx_body
33    }
34
35    fn to_tester(&self) -> TxTester {
36        TxTester::new(&self.parser.tx_body)
37    }
38}