pub mod cosmos;
pub mod provenance;
use cosmwasm_schema::cw_serde;
use cosmwasm_std::{Addr, Binary, Coin, Decimal};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ProvenanceRoute {
    Attribute,
    Marker,
    Name,
    Metadata,
    Msgfees,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Names {
    pub records: Vec<Name>,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Name {
    pub name: String,
    pub address: Addr,
    pub restricted: bool,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Hash, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum NameBinding {
    Restricted,
    Unrestricted,
}
impl Default for NameBinding {
    fn default() -> Self {
        NameBinding::Restricted
    }
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Attributes {
    pub address: Addr,
    #[serde(default)]
    pub attributes: Vec<Attribute>,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum AttributeValueType {
    Uuid,
    Json,
    String,
    Bytes,
    Uri,
    Int,
    Float,
    Proto,
    Unspecified,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Attribute {
    pub name: String,
    pub value: Binary,
    #[serde(rename(serialize = "type", deserialize = "type"))]
    pub value_type: AttributeValueType,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Marker {
    pub address: Addr,
    pub allow_forced_transfer: bool,
    #[serde(default)]
    pub coins: Vec<Coin>,
    pub account_number: u64,
    pub sequence: u64,
    #[serde(default)]
    pub manager: String,
    pub permissions: Vec<AccessGrant>,
    pub status: MarkerStatus,
    pub denom: String,
    pub total_supply: Decimal,
    pub marker_type: MarkerType,
    pub supply_fixed: bool,
}
impl Marker {
    pub fn bank_sends_disabled(&self) -> bool {
        matches!(self.marker_type, MarkerType::Restricted)
    }
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct AccessGrant {
    pub permissions: Vec<MarkerAccess>,
    pub address: Addr,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum MarkerAccess {
    Admin,
    Burn,
    Deposit,
    Delete,
    Mint,
    Transfer,
    Unspecified,
    Withdraw,
}
impl MarkerAccess {
    pub fn all() -> Vec<MarkerAccess> {
        vec![
            MarkerAccess::Admin,
            MarkerAccess::Burn,
            MarkerAccess::Deposit,
            MarkerAccess::Delete,
            MarkerAccess::Mint,
            MarkerAccess::Transfer,
            MarkerAccess::Withdraw,
        ]
    }
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum MarkerType {
    Coin,
    Restricted,
    Unspecified,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum MarkerStatus {
    Active,
    Cancelled,
    Destroyed,
    Finalized,
    Proposed,
    Unspecified,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Scope {
    pub scope_id: String,
    pub specification_id: String,
    #[serde(default)]
    pub owners: Vec<Party>,
    #[serde(default)]
    pub data_access: Vec<Addr>,
    pub value_owner_address: Addr,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Session {
    pub name: String,
    pub session_id: String,
    pub specification_id: String,
    #[serde(default)]
    pub parties: Vec<Party>,
    pub context: Binary,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Sessions {
    pub sessions: Vec<Session>,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Record {
    pub name: String,
    pub session_id: String,
    pub specification_id: String,
    pub process: Process,
    #[serde(default)]
    pub inputs: Vec<RecordInput>,
    #[serde(default)]
    pub outputs: Vec<RecordOutput>,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Records {
    pub records: Vec<Record>,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Party {
    pub address: Addr,
    pub role: PartyType,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum PartyType {
    Originator,
    Servicer,
    Investor,
    Custodian,
    Owner,
    Affiliate,
    Omnibus,
    Provenance,
    Unspecified,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Process {
    pub process_id: ProcessId,
    pub method: String,
    pub name: String,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ProcessId {
    Address { address: String },
    Hash { hash: String },
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct RecordInput {
    pub name: String,
    pub type_name: String,
    pub source: RecordInputSource,
    pub status: RecordInputStatus,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum RecordInputSource {
    Record { record_id: String },
    Hash { hash: String },
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum RecordInputStatus {
    Proposed,
    Record,
    Unspecified,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct RecordOutput {
    pub hash: String,
    pub status: ResultStatus,
}
#[deprecated(since = "2.0.0")]
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ResultStatus {
    Pass,
    Skip,
    Fail,
    Unspecified,
}
#[deprecated(since = "2.0.0")]
#[cw_serde]
pub struct Fee {
    pub recipient: Option<Addr>,
    pub amount: Coin,
}