use amplify::num::u256;
use strict_types::StrictVal;
use ultrasonic::{AuthToken, CellLock};
pub type StateTy = u256;
#[derive(Clone, Eq, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "camelCase"))]
pub struct StateAtom {
pub verified: StrictVal,
pub unverified: Option<StrictVal>,
}
impl StateAtom {
#[inline]
pub fn new_verified(val: impl Into<StrictVal>) -> Self { Self { verified: val.into(), unverified: None } }
#[inline]
pub fn new_unverified(val: impl Into<StrictVal>) -> Self {
Self { verified: StrictVal::Unit, unverified: Some(val.into()) }
}
#[inline]
pub fn with(verified: impl Into<StrictVal>, unverified: impl Into<StrictVal>) -> Self {
Self {
verified: verified.into(),
unverified: Some(unverified.into()),
}
}
}
#[derive(Clone, Eq, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "camelCase"))]
pub struct DataCell {
pub data: StrictVal,
pub auth: AuthToken,
pub lock: Option<CellLock>,
}
impl DataCell {
#[inline]
pub fn new_unlocked(auth: impl Into<AuthToken>, data: impl Into<StrictVal>) -> Self {
Self { data: data.into(), auth: auth.into(), lock: None }
}
}