bee_block/output/
token_id.rs

1// Copyright 2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::output::FoundryId;
5
6impl_id!(pub TokenId, 38, "TODO.");
7
8#[cfg(feature = "serde")]
9string_serde_impl!(TokenId);
10
11impl From<FoundryId> for TokenId {
12    fn from(foundry_id: FoundryId) -> Self {
13        TokenId::new(*foundry_id)
14    }
15}
16
17#[cfg(feature = "dto")]
18#[allow(missing_docs)]
19pub mod dto {
20    use serde::{Deserialize, Serialize};
21
22    use super::*;
23    use crate::error::dto::DtoError;
24
25    /// Describes a token id.
26    #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
27    pub struct TokenIdDto(pub String);
28
29    impl From<&TokenId> for TokenIdDto {
30        fn from(value: &TokenId) -> Self {
31            Self(prefix_hex::encode(**value))
32        }
33    }
34
35    impl TryFrom<&TokenIdDto> for TokenId {
36        type Error = DtoError;
37
38        fn try_from(value: &TokenIdDto) -> Result<Self, Self::Error> {
39            let token_id: [u8; TokenId::LENGTH] =
40                prefix_hex::decode(&value.0).map_err(|_e| DtoError::InvalidField("tokenId"))?;
41            Ok(TokenId::new(token_id))
42        }
43    }
44}