1use crate::consensus::basic::data_contract::UnknownTransferableTypeError;
2use crate::consensus::basic::BasicError;
3use crate::consensus::ConsensusError;
4use crate::ProtocolError;
5use derive_more::Display;
6
7#[derive(Clone, Copy, Debug, PartialEq, Default, Display)]
11#[repr(u8)]
12pub enum Transferable {
13 #[default]
14 Never = 0,
15 Always = 1,
16}
17
18impl Transferable {
19 pub fn is_transferable(&self) -> bool {
20 match self {
21 Transferable::Never => false,
22 Transferable::Always => true,
23 }
24 }
25}
26
27impl TryFrom<u8> for Transferable {
28 type Error = ProtocolError;
29
30 fn try_from(value: u8) -> Result<Self, Self::Error> {
31 match value {
32 0 => Ok(Self::Never),
33 1 => Ok(Self::Always),
34 value => Err(ProtocolError::ConsensusError(
35 ConsensusError::BasicError(BasicError::UnknownTransferableTypeError(
36 UnknownTransferableTypeError::new(vec![0, 1], value),
37 ))
38 .into(),
39 )),
40 }
41 }
42}