use std::collections::{btree_set, BTreeSet};
use amplify::confinement::{Confined, TinyAscii, TinyBlob, TinyString};
use rgb::{ContractId, SchemaId};
use crate::interface::{IfaceId, ImplId, SupplId};
use crate::LIB_NAME_RGB_STD;
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_RGB_STD, tags = order, dumb = ContentId::Schema(strict_dumb!()))]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(crate = "serde_crate", rename_all = "camelCase")
)]
pub enum ContentId {
Schema(SchemaId),
Genesis(ContractId),
Iface(IfaceId),
IfaceImpl(ImplId),
Suppl(SupplId),
}
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)]
#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_RGB_STD)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(crate = "serde_crate", rename_all = "camelCase")
)]
#[display("{name} <{email}>; using={suite}")]
#[non_exhaustive]
pub struct Identity {
pub name: TinyString,
pub email: TinyAscii,
pub suite: IdSuite,
pub pk: TinyBlob,
}
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)]
#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_RGB_STD, tags = repr, into_u8, try_from_u8)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(crate = "serde_crate", rename_all = "camelCase")
)]
#[non_exhaustive]
#[repr(u8)]
pub enum IdSuite {
#[strict_type(dumb)]
#[display("OpenPGP")]
Pgp,
#[display("OpenSSH")]
Ssh,
#[display("SSI")]
Ssi,
}
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_RGB_STD)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(crate = "serde_crate", rename_all = "camelCase")
)]
pub struct Cert {
pub signer: Identity,
pub signature: TinyBlob,
}
#[derive(Wrapper, WrapperMut, Clone, PartialEq, Eq, Hash, Debug, From)]
#[wrapper(Deref)]
#[wrapper_mut(DerefMut)]
#[derive(StrictDumb, StrictType, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_RGB_STD, dumb = Self(confined_bset!(strict_dumb!())))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(crate = "serde_crate"))]
pub struct ContentSigs(Confined<BTreeSet<Cert>, 1, 10>);
impl IntoIterator for ContentSigs {
type Item = Cert;
type IntoIter = btree_set::IntoIter<Cert>;
fn into_iter(self) -> Self::IntoIter { self.0.into_iter() }
}