// @generated
// This file is @generated by prost-build.
#[derive(Clone, PartialEq, ::prost::Message, ::serde::Serialize, ::serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct AssetInvoice {
    /// The owner of the asset
    #[prost(string, tag = "1")]
    pub owner: ::prost::alloc::string::String,
    /// Operator address of this asset
    #[prost(string, tag = "10")]
    pub operator_proxy: ::prost::alloc::string::String,
    /// The status of the asset,
    /// Init: NOTARISED
    #[prost(enumeration = "Status", tag = "2")]
    pub status: i32,
    /// odp hash
    #[prost(string, tag = "3")]
    pub odp_hash: ::prost::alloc::string::String,
    /// issuance ID: this is the record string by the registry
    /// Updatable only by the owner
    #[prost(string, tag = "4")]
    pub issuance_id: ::prost::alloc::string::String,
    /// The nominal value of the asset at notarisation
    #[prost(message, optional, tag = "5")]
    pub currency_value: ::core::option::Option<CurrencyValue>,
    /// Expiration date / aka the final agreed payment due date in unix timestamp
    /// This maps to InvoiceUpdatedPaymentDueDate in the ODP (updated by the
    /// obligor) For a given date, we consider the end of the day in UTC at 18:00
    #[prost(uint64, tag = "6")]
    pub expiration: u64,
    /// Collateralised reference available if asset has been used as collateral
    /// i.e. the tokenfactory denom
    #[prost(string, tag = "7")]
    pub collateral_ref: ::prost::alloc::string::String,
    /// On notarise, the module to call
    /// The asset data will be passed as arguments
    #[prost(string, tag = "8")]
    pub on_notarise_hook: ::prost::alloc::string::String,
    /// The address that sent this asset for notarisation
    #[prost(string, tag = "9")]
    pub notarise_proxy: ::prost::alloc::string::String,
}
/// The data expected to update an asset invoice in MsgUpdateNotarisedAsset
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AssetInvoiceUpdateData {
    /// Updates owner if not empty and different
    #[prost(string, tag = "1")]
    pub owner: ::prost::alloc::string::String,
    /// Update Operator if not empty and different
    #[prost(string, tag = "5")]
    pub operator_proxy: ::prost::alloc::string::String,
    /// Status always updates
    #[prost(enumeration = "Status", tag = "2")]
    pub status: i32,
    /// Issuance ID updates if not empty and different
    #[prost(string, tag = "3")]
    pub issuance_id: ::prost::alloc::string::String,
    /// Collateral Ref updates if not empty and different
    #[prost(string, tag = "4")]
    pub collateral_ref: ::prost::alloc::string::String,
}
/// The fiat value of notarised asset
#[derive(Clone, PartialEq, ::prost::Message, ::serde::Serialize, ::serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct CurrencyValue {
    /// The currency: USD / EUR / etc
    #[prost(enumeration = "Currency", tag = "1")]
    pub currency: i32,
    /// This is exacted to the nearest 2 decimal places
    /// This is the value in sdk.DecFromStr format "20.95" will be 20.95currency
    #[prost(string, tag = "2")]
    pub value: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message, ::serde::Serialize, ::serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct AssetInvoiceData {
    /// odp hash
    #[prost(string, tag = "1")]
    pub odp_hash: ::prost::alloc::string::String,
    /// The nominal value of the asset at notarisation
    #[prost(message, optional, tag = "2")]
    pub currency_value: ::core::option::Option<CurrencyValue>,
    /// Expiration date / aka payment due date in unix timestamp
    /// For a given date, we consider the end of the day in UTC at 18:00
    #[prost(uint64, tag = "3")]
    pub expiration: u64,
    /// Discount rate
    /// This is the rate in sdk.DecFromStr format "0.95" for 95%
    #[prost(string, tag = "4")]
    pub discount_rate: ::prost::alloc::string::String,
    /// owner
    #[prost(string, tag = "5")]
    pub owner: ::prost::alloc::string::String,
    /// Operator address of this asset
    #[prost(string, tag = "6")]
    pub operator_proxy: ::prost::alloc::string::String,
}
/// The lifecycle status of the asset
#[derive(
    Clone,
    Copy,
    Debug,
    PartialEq,
    Eq,
    Hash,
    PartialOrd,
    Ord,
    ::prost::Enumeration,
    ::serde::Serialize,
    ::serde::Deserialize,
)]
#[repr(i32)]
pub enum Status {
    /// Unspecified status
    Unspecified = 0,
    /// The underlying asset has been verified and registered onchain
    Notarised = 1,
    /// The notarised asset has been used as a collateral
    Collateralised = 2,
    /// The asset has been cancelled/delisted from the depository
    Matured = 3,
}
impl Status {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Unspecified => "STATUS_UNSPECIFIED",
            Self::Notarised => "NOTARISED",
            Self::Collateralised => "COLLATERALISED",
            Self::Matured => "MATURED",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "STATUS_UNSPECIFIED" => Some(Self::Unspecified),
            "NOTARISED" => Some(Self::Notarised),
            "COLLATERALISED" => Some(Self::Collateralised),
            "MATURED" => Some(Self::Matured),
            _ => None,
        }
    }
}
#[derive(
    Clone,
    Copy,
    Debug,
    PartialEq,
    Eq,
    Hash,
    PartialOrd,
    Ord,
    ::prost::Enumeration,
    ::serde::Serialize,
    ::serde::Deserialize,
)]
#[repr(i32)]
pub enum Currency {
    /// Unspecified currency
    Unspecified = 0,
    /// Euro
    Eur = 1,
    /// US Dollar
    Usd = 2,
    /// British Pound
    Gbp = 3,
}
impl Currency {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Unspecified => "CURRENCY_UNSPECIFIED",
            Self::Eur => "EUR",
            Self::Usd => "USD",
            Self::Gbp => "GBP",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "CURRENCY_UNSPECIFIED" => Some(Self::Unspecified),
            "EUR" => Some(Self::Eur),
            "USD" => Some(Self::Usd),
            "GBP" => Some(Self::Gbp),
            _ => None,
        }
    }
}
/// Emitted on Notarise Msg
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventNotarise {
    /// The id of the notary info
    #[prost(uint64, tag = "1")]
    pub id: u64,
    /// The id of the notarised asset created
    #[prost(string, tag = "2")]
    pub notarised_asset_id: ::prost::alloc::string::String,
    /// The amount of udt burned as notarisation fee
    #[prost(message, optional, tag = "3")]
    pub fee_burnt: ::core::option::Option<super::super::super::cosmos::base::v1beta1::Coin>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventUpdateNotarisedAsset {
    /// The id of the notarised asset
    #[prost(string, tag = "1")]
    pub notarised_asset_id: ::prost::alloc::string::String,
}
/// Emitted on decentralised application registration of a notary info
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventRegisterNotaryInfo {
    /// The id of the notary info
    #[prost(uint64, tag = "1")]
    pub id: u64,
    /// The address used to create this object and can be used to update it
    #[prost(string, tag = "2")]
    pub notary_info_admin: ::prost::alloc::string::String,
    /// The asset type id
    #[prost(uint64, tag = "3")]
    pub asset_type_id: u64,
}
/// Emitted on both updates: VerificationMechanism and PostVerificationAction
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventUpdateNotaryInfo {
    /// The id of the notary info
    #[prost(uint64, tag = "1")]
    pub id: u64,
    /// Caller Tx ExtensionOption VP Route and additional request parameters in
    /// AnteHandler
    #[prost(message, optional, tag = "2")]
    pub caller_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
    /// Asset Route and additional request params
    #[prost(message, optional, tag = "3")]
    pub asset_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
}
/// Emitted on notary info deletion
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct EventDeleteNotaryInfo {
    /// The id of the notary info
    #[prost(uint64, tag = "1")]
    pub id: u64,
}
/// Emitted on notary info admin update
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventUpdateNotaryInfoAdmin {
    /// The id of the notary info
    #[prost(uint64, tag = "1")]
    pub id: u64,
    /// The address used to create this object and can be used to update it
    #[prost(string, tag = "2")]
    pub new_notary_info_admin: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GenesisState {
    /// The mapping of the notary info ID to the actual NotaryInfo struct
    /// This is updated by registering NotaryInfo and used for users in notarise
    /// transactions
    #[prost(map = "uint64, message", tag = "1")]
    pub notary_info_map: ::std::collections::HashMap<u64, NotaryInfo>,
    /// The next notarise object ID
    #[prost(uint64, tag = "2")]
    pub next_notary_info_id: u64,
    /// The mapping of the notarised asset ID to the actual NotarisedAsset struct
    #[prost(map = "string, message", tag = "3")]
    pub notarised_asset_map:
        ::std::collections::HashMap<::prost::alloc::string::String, NotarisedAsset>,
    /// The mapping of asset type ID to asset type name
    #[prost(map = "uint64, string", tag = "4")]
    pub asset_type_map: ::std::collections::HashMap<u64, ::prost::alloc::string::String>,
    /// Currency conversion rates to EUR (e.g., "USD" -> "0.85")
    /// Currency is Enum in d.notary.v1.Currency
    #[prost(map = "int32, message", tag = "5")]
    pub currency_conversion_rates: ::std::collections::HashMap<i32, ConversionRate>,
    /// EUR price in udt (e.g., 1 Euro = 250,000,000udt)
    #[prost(string, tag = "6")]
    pub eur_price_in_udt: ::prost::alloc::string::String,
    /// The fee rate for notarisation (e.g., 0.01 for 1%)
    #[prost(string, tag = "7")]
    pub notarisation_fee_rate: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ConversionRate {
    #[prost(string, tag = "1")]
    pub conversiont_rate: ::prost::alloc::string::String,
}
/// The verifier contract type to be stored in the module
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NotaryInfo {
    /// The address used to create this object and can be used to update it
    #[prost(string, tag = "1")]
    pub notary_info_admin: ::prost::alloc::string::String,
    /// Asset Type ID: the key to the type of asset
    #[prost(uint64, tag = "2")]
    pub asset_type_id: u64,
    /// Caller Tx ExtensionOption VP Route and additional request parameters in
    /// AnteHandler
    #[prost(message, optional, tag = "3")]
    pub caller_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
    /// Asset Route and additional request params
    #[prost(message, optional, tag = "4")]
    pub asset_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
}
/// Notarised Asset wrapper that can contain different asset types
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NotarisedAsset {
    #[prost(oneof = "notarised_asset::Asset", tags = "1")]
    pub asset: ::core::option::Option<notarised_asset::Asset>,
}
/// Nested message and enum types in `NotarisedAsset`.
pub mod notarised_asset {
    #[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Asset {
        /// Future asset types can be added here:
        /// AssetBond asset_bond = 2;
        /// AssetEquity asset_equity = 3;
        #[prost(message, tag = "1")]
        AssetInvoice(super::AssetInvoice),
    }
}
// ========= NotaryInfo =========

#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct GetNotaryInfoByIdRequest {
    #[prost(uint64, tag = "1")]
    pub id: u64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNotaryInfoByIdResponse {
    #[prost(message, optional, tag = "1")]
    pub notary_info: ::core::option::Option<NotaryInfo>,
    /// VP Route Request
    #[prost(message, optional, tag = "2")]
    pub vcv_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
}
/// ========= NotaryInfoNextId =========
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct GetNotaryInfoNextIdRequest {}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct GetNotaryInfoNextIdResponse {
    #[prost(uint64, tag = "1")]
    pub next_id: u64,
}
/// ========= Currency Conversion Rate =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetCurrencyConversionRateRequest {
    #[prost(string, tag = "1")]
    pub currency: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetCurrencyConversionRateResponse {
    #[prost(string, tag = "1")]
    pub rate: ::prost::alloc::string::String,
}
/// ========= EUR Price In Udt =========
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct GetEurPriceInUdtRequest {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetEurPriceInUdtResponse {
    #[prost(string, tag = "1")]
    pub price: ::prost::alloc::string::String,
}
/// ========= Notarisation Fee Rate =========
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct GetNotarisationFeeRateRequest {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNotarisationFeeRateResponse {
    #[prost(string, tag = "1")]
    pub rate: ::prost::alloc::string::String,
}
/// ========= Notarised Asset =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNotarisedAssetRequest {
    #[prost(string, tag = "1")]
    pub asset_id: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNotarisedAssetResponse {
    #[prost(message, optional, tag = "1")]
    pub notarised_asset: ::core::option::Option<NotarisedAsset>,
}
/// ========= Notarised Assets (Paginated) =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNotarisedAssetsRequest {
    #[prost(message, optional, tag = "1")]
    pub pagination:
        ::core::option::Option<super::super::super::cosmos::base::query::v1beta1::PageRequest>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNotarisedAssetsResponse {
    #[prost(message, repeated, tag = "1")]
    pub notarised_assets: ::prost::alloc::vec::Vec<NotarisedAssetEntry>,
    #[prost(message, optional, tag = "2")]
    pub pagination:
        ::core::option::Option<super::super::super::cosmos::base::query::v1beta1::PageResponse>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NotarisedAssetEntry {
    #[prost(string, tag = "1")]
    pub asset_id: ::prost::alloc::string::String,
    #[prost(message, optional, tag = "2")]
    pub notarised_asset: ::core::option::Option<NotarisedAsset>,
}
/// ---------------------------------- GetAuthority
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct QueryGetAuthorityRequest {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct QueryGetAuthorityResponse {
    #[prost(string, tag = "1")]
    pub authority: ::prost::alloc::string::String,
}
/// ========= Notarise =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgNotarise {
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// NotaryInfoId
    #[prost(uint64, tag = "2")]
    pub notary_info_id: u64,
    /// Data to be verified
    #[prost(bytes = "vec", tag = "3")]
    pub verifier_input: ::prost::alloc::vec::Vec<u8>,
    /// Notarised asset input
    #[prost(bytes = "vec", tag = "4")]
    pub asset_data: ::prost::alloc::vec::Vec<u8>,
    /// owner of the notarised asset if not sender
    #[prost(string, tag = "5")]
    pub owner: ::prost::alloc::string::String,
    /// Max notarise fee acceptable by the sender, if not provided, no limit
    #[prost(message, optional, tag = "6")]
    pub max_notarise_fee: ::core::option::Option<super::super::super::cosmos::base::v1beta1::Coin>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgNotariseResponse {
    /// Notary Info Id
    #[prost(uint64, tag = "1")]
    pub notary_info_id: u64,
    /// Notarise Asset Type ID
    #[prost(uint64, tag = "2")]
    pub asset_type_id: u64,
    /// Notarise result: the id of the notarised asset created
    #[prost(string, tag = "3")]
    pub notarised_asset_id: ::prost::alloc::string::String,
}
// ========= Update Notarised Asset =========

#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgUpdateNotarisedAsset {
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// Notarised Asset ID
    #[prost(string, tag = "2")]
    pub notarised_asset_id: ::prost::alloc::string::String,
    /// New asset data
    #[prost(bytes = "vec", tag = "3")]
    pub new_asset_data: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgUpdateNotarisedAssetResponse {
    /// The Updated Notarised Asset ID
    #[prost(string, tag = "1")]
    pub updated_notarised_asset_id: ::prost::alloc::string::String,
}
/// ========= Registration =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgRegisterNotaryInfo {
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// Notary Info Admin
    #[prost(string, tag = "2")]
    pub notary_info_admin: ::prost::alloc::string::String,
    /// Caller Verifier Route Request
    #[prost(message, optional, tag = "3")]
    pub caller_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
    /// Asset Verifier Route Request
    #[prost(message, optional, tag = "4")]
    pub asset_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
    /// Notarise Asset Type ID
    #[prost(uint64, tag = "5")]
    pub asset_type_id: u64,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgRegisterNotaryInfoResponse {
    #[prost(uint64, tag = "1")]
    pub notary_info_id: u64,
}
/// ========= Update Admin =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgUpdateAdmin {
    /// message sender (the controller of this info).
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// NotaryInfoId
    #[prost(uint64, tag = "2")]
    pub notary_info_id: u64,
    /// New admin
    #[prost(string, tag = "3")]
    pub new_admin: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgUpdateAdminResponse {}
// ========= Update notary info =========

#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgUpdateVerifierRoutes {
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// NotaryInfoId
    #[prost(uint64, tag = "2")]
    pub notary_info_id: u64,
    /// Caller VP Route and Requirements
    #[prost(message, optional, tag = "3")]
    pub caller_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
    /// Asset VP Route and Requirements
    #[prost(message, optional, tag = "4")]
    pub asset_route_and_additional_req:
        ::core::option::Option<super::super::vcv::v1::RouteAndAdditionalReq>,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgUpdateVerifierRoutesResponse {}
/// ========= Remove Notary Info =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgRemoveNotaryInfo {
    /// message sender (the controller of this info).
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// NotaryInfoId
    #[prost(uint64, tag = "2")]
    pub notary_info_id: u64,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgRemoveNotaryInfoResponse {
    /// id of the removed notary Info
    #[prost(uint64, tag = "1")]
    pub notary_info_id: u64,
}
/// ========= Set Currency Conversion Rate =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgSetCurrencyConversionRate {
    /// message sender (must be authorized)
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// Currency code (e.g., "USD", "GBP")
    #[prost(string, tag = "2")]
    pub currency: ::prost::alloc::string::String,
    /// Conversion rate to EUR as a decimal string
    #[prost(string, tag = "3")]
    pub rate: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgSetCurrencyConversionRateResponse {}
/// ========= Set EUR Price In Udt =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgSetEurPriceInUdt {
    /// message sender (must be authorized)
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// Price in udt as a decimal string
    #[prost(string, tag = "2")]
    pub price: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgSetEurPriceInUdtResponse {}
/// ========= Set Notarisation Fee Rate =========
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MsgSetNotarisationFeeRate {
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// Fee rate as a decimal string (e.g., "0.01" for 1%)
    #[prost(string, tag = "2")]
    pub rate: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MsgSetNotarisationFeeRateResponse {}
include!("d.notary.v1.tonic.rs");
// @@protoc_insertion_point(module)
