foundation_urtypes/
passport.rs1use minicbor::data::Tag;
15use minicbor::decode::Error;
16use minicbor::encode::Write;
17use minicbor::{Decode, Decoder, Encode, Encoder};
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
21pub enum Model {
22 FoundersEdition,
24 Batch2,
26}
27
28impl Model {
29 pub const TAG: Tag = Tag::new(721);
31}
32
33impl<'b, C> Decode<'b, C> for Model {
34 fn decode(d: &mut Decoder<'b>, _ctx: &mut C) -> Result<Self, Error> {
35 Model::try_from(d.u32()?).map_err(|_| Error::message("invalid passport-model"))
36 }
37}
38
39impl<C> Encode<C> for Model {
40 fn encode<W: Write>(
41 &self,
42 e: &mut Encoder<W>,
43 _ctx: &mut C,
44 ) -> Result<(), minicbor::encode::Error<W::Error>> {
45 e.u32((*self).into())?;
46 Ok(())
47 }
48}
49
50impl TryFrom<u32> for Model {
51 type Error = InvalidModelError;
52
53 fn try_from(number: u32) -> Result<Self, Self::Error> {
54 match number {
55 1 => Ok(Model::FoundersEdition),
56 2 => Ok(Model::Batch2),
57 _ => Err(InvalidModelError { number }),
58 }
59 }
60}
61
62impl From<Model> for u32 {
63 fn from(model: Model) -> Self {
64 match model {
65 Model::FoundersEdition => 1,
66 Model::Batch2 => 2,
67 }
68 }
69}
70
71#[derive(Debug, Clone, Copy, Eq, PartialEq)]
73pub struct InvalidModelError {
74 pub number: u32,
76}