dpp/tokens/
gas_fees_paid_by.rs1use crate::consensus::basic::data_contract::UnknownGasFeesPaidByError;
2use crate::consensus::basic::BasicError;
3use crate::consensus::ConsensusError;
4use crate::ProtocolError;
5use bincode::{Decode, Encode};
6use derive_more::Display;
7#[cfg(any(
8 feature = "serde-conversion",
9 all(feature = "serde-conversion", feature = "serde-conversion"),
10))]
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display)]
14#[cfg_attr(
15 any(
16 feature = "serde-conversion",
17 all(feature = "serde-conversion", feature = "serde-conversion"),
18 ),
19 derive(Serialize, Deserialize)
20)]
21pub enum GasFeesPaidBy {
22 #[default]
24 DocumentOwner = 0,
25 ContractOwner = 1,
27 PreferContractOwner = 2,
30}
31
32impl From<GasFeesPaidBy> for u8 {
33 fn from(value: GasFeesPaidBy) -> Self {
34 match value {
35 GasFeesPaidBy::DocumentOwner => 0,
36 GasFeesPaidBy::ContractOwner => 1,
37 GasFeesPaidBy::PreferContractOwner => 2,
38 }
39 }
40}
41
42impl TryFrom<u8> for GasFeesPaidBy {
43 type Error = ProtocolError;
44
45 fn try_from(value: u8) -> Result<Self, Self::Error> {
46 match value {
47 0 => Ok(GasFeesPaidBy::DocumentOwner),
48 1 => Ok(GasFeesPaidBy::ContractOwner),
49 2 => Ok(GasFeesPaidBy::PreferContractOwner),
50 value => Err(ProtocolError::ConsensusError(
51 ConsensusError::BasicError(BasicError::UnknownGasFeesPaidByError(
52 UnknownGasFeesPaidByError::new(vec![0, 1, 2], value as u64),
53 ))
54 .into(),
55 )),
56 }
57 }
58}
59
60impl TryFrom<u64> for GasFeesPaidBy {
61 type Error = ProtocolError;
62
63 fn try_from(value: u64) -> Result<Self, Self::Error> {
64 u8::try_from(value)
65 .map_err(|_| {
66 ProtocolError::ConsensusError(
67 ConsensusError::BasicError(BasicError::UnknownGasFeesPaidByError(
68 UnknownGasFeesPaidByError::new(vec![0, 1, 2], value),
69 ))
70 .into(),
71 )
72 })?
73 .try_into()
74 }
75}