bee_block/output/
chain_id.rs

1// Copyright 2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use derive_more::From;
5
6use crate::output::{AliasId, FoundryId, NftId, OutputId};
7
8///
9#[derive(Clone, Copy, Eq, Hash, PartialEq, Ord, PartialOrd, From)]
10pub enum ChainId {
11    ///
12    Alias(AliasId),
13    ///
14    Foundry(FoundryId),
15    ///
16    Nft(NftId),
17}
18
19impl ChainId {
20    ///
21    pub fn is_null(&self) -> bool {
22        match self {
23            Self::Alias(alias_id) => alias_id.is_null(),
24            Self::Foundry(foundry_id) => foundry_id.is_null(),
25            Self::Nft(nft_id) => nft_id.is_null(),
26        }
27    }
28
29    ///
30    pub fn or_from_output_id(self, output_id: OutputId) -> Self {
31        if !self.is_null() {
32            return self;
33        }
34
35        match self {
36            Self::Alias(_) => Self::Alias(AliasId::from(output_id)),
37            Self::Foundry(_) => self,
38            Self::Nft(_) => Self::Nft(NftId::from(output_id)),
39        }
40    }
41}
42
43impl core::fmt::Display for ChainId {
44    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
45        match self {
46            ChainId::Alias(id) => write!(f, "{}", id),
47            ChainId::Foundry(id) => write!(f, "{}", id),
48            ChainId::Nft(id) => write!(f, "{}", id),
49        }
50    }
51}
52
53impl core::fmt::Debug for ChainId {
54    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
55        match self {
56            ChainId::Alias(id) => write!(f, "ChainId({:?})", id),
57            ChainId::Foundry(id) => write!(f, "ChainId({:?})", id),
58            ChainId::Nft(id) => write!(f, "ChainId({:?})", id),
59        }
60    }
61}