use amplify::confinement::TinyString;
use chrono::{DateTime, Utc};
use rgb::{Articles, Codex, CodexId, Consensus, ContractId, ContractName, Identity};
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "camelCase"))]
pub struct ContractInfo {
pub id: ContractId,
pub name: ContractName,
pub issuer: Identity,
pub timestamp: DateTime<Utc>,
pub codex: CodexInfo,
pub consensus: Consensus,
pub testnet: bool,
}
impl ContractInfo {
pub fn new(id: ContractId, articles: &Articles) -> Self {
let meta = &articles.issue().meta;
Self {
id,
name: meta.name.clone(),
issuer: meta.issuer.clone(),
timestamp: DateTime::from_timestamp(meta.timestamp, 0).expect("Invalid timestamp"),
codex: CodexInfo::new(articles.codex()),
consensus: meta.consensus,
testnet: meta.testnet,
}
}
}
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "camelCase"))]
pub struct CodexInfo {
pub id: CodexId,
pub name: TinyString,
pub developer: Identity,
pub timestamp: DateTime<Utc>,
}
impl CodexInfo {
pub fn new(codex: &Codex) -> Self {
Self {
id: codex.codex_id(),
name: codex.name.clone(),
developer: codex.developer.clone(),
timestamp: DateTime::from_timestamp(codex.timestamp, 0).expect("Invalid timestamp"),
}
}
}