whisky_pallas/wrapper/transaction_body/
vote.rs1use 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}