dpp/document/
transfer.rs

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/// We made this enum because in the future we might have a case where documents are sometimes
8/// transferable
9
10#[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}