whisky_pallas/wrapper/transaction_body/
vote.rs

1use pallas::ledger::primitives::{conway::Vote as PallasVote, Fragment};
2use whisky_common::WError;
3
4pub enum VoteKind {
5    Yes,
6    No,
7    Abstain,
8}
9
10#[derive(Debug, PartialEq, Eq, Clone)]
11pub struct Vote {
12    pub inner: PallasVote,
13}
14impl Vote {
15    pub fn new(vote: VoteKind) -> Result<Self, WError> {
16        let pallas_vote = match vote {
17            VoteKind::Yes => PallasVote::Yes,
18            VoteKind::No => PallasVote::No,
19            VoteKind::Abstain => PallasVote::Abstain,
20        };
21
22        Ok(Self { inner: pallas_vote })
23    }
24
25    pub fn encode(&self) -> Result<String, WError> {
26        let encoded = self
27            .inner
28            .encode_fragment()
29            .map_err(|e| WError::new("Vote::encode", &format!("Fragment encode error: {}", e)))?;
30        Ok(hex::encode(encoded))
31    }
32
33    pub fn decode_bytes(bytes: &[u8]) -> Result<Self, WError> {
34        let inner = PallasVote::decode_fragment(&bytes).map_err(|e| {
35            WError::new(
36                "Vote::decode_bytes",
37                &format!("Fragment decode error: {}", e),
38            )
39        })?;
40        Ok(Self { inner })
41    }
42}