use milkyway_std_derive::CosmwasmExt;
/// Params defines the parameters for the module.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.Params")]
pub struct Params {
    /// This value represents the percentage that needs to be sent to the
    /// insurance fund in order to restake a certain amount of vested tokens.
    /// For example, if this value is 2%, a user must send 2 tokens to
    /// the insurance fund to restake 100 vested tokens
    #[prost(string, tag = "1")]
    pub insurance_percentage: ::prost::alloc::string::String,
    /// This value represents the list of users who are authorized to execute the
    /// MsgBurnVestedRepresentation.
    #[prost(string, repeated, tag = "2")]
    pub burners: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// This value represents the list of users who are authorized to execute the
    /// MsgMintVestedRepresentation.
    #[prost(string, repeated, tag = "3")]
    pub minters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// UserInsuranceFund defines a user's insurance fund.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.UserInsuranceFund")]
pub struct UserInsuranceFund {
    /// Amount of coins deposited into the user's insurance fund.
    #[prost(message, repeated, tag = "1")]
    pub balance: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
    /// Amount in the user's insurance that is being used to secure the
    /// restaked toknes. For example an user has 10 TIA in their insurance fund,
    /// the insurance percentage is 1% so they can restake 1000 TIA.
    /// The user restakes only 100 TIA, in this case the balance is 10 TIA and used
    /// is 1 TIA.
    #[prost(message, repeated, tag = "2")]
    pub used: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// BurnCoins is a struct that contains the information about the coins to burn
/// once the unbonding period of the vested representation tokens ends.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.BurnCoins")]
pub struct BurnCoins {
    /// Address of who has delegated the coins.
    #[prost(string, tag = "1")]
    pub delegator_address: ::prost::alloc::string::String,
    /// CompletionTime is the unix time for unbonding completion.
    #[prost(message, optional, tag = "2")]
    pub completion_time: ::core::option::Option<crate::shim::Timestamp>,
    /// Amount of coins to be burned from the delegator address.
    #[prost(message, repeated, tag = "3")]
    pub amount: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// BurnCoinsList represents a list of BurnCoins.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.BurnCoinsList")]
pub struct BurnCoinsList {
    #[prost(message, repeated, tag = "1")]
    pub data: ::prost::alloc::vec::Vec<BurnCoins>,
}
/// UserInsuranceFundState represents a user's insurance fund.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.UserInsuranceFundState")]
pub struct UserInsuranceFundState {
    /// Address of who owns the insurance fund.
    #[prost(string, tag = "1")]
    pub user_address: ::prost::alloc::string::String,
    /// InsuranceFund represents the user's insurance fund.
    #[prost(message, optional, tag = "2")]
    pub insurance_fund: ::core::option::Option<UserInsuranceFund>,
}
/// GenesisState defines the liquidvesting module's genesis state.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.GenesisState")]
pub struct GenesisState {
    /// Params defines the parameters of the module.
    #[prost(message, optional, tag = "1")]
    pub params: ::core::option::Option<Params>,
    /// BurnCoins represents the list of coins that should be burned from the
    /// users' balances
    #[prost(message, repeated, tag = "2")]
    pub burn_coins: ::prost::alloc::vec::Vec<BurnCoins>,
    /// UserInsuranceFunds represents the users' insurance fund.
    #[prost(message, repeated, tag = "3")]
    pub user_insurance_funds: ::prost::alloc::vec::Vec<UserInsuranceFundState>,
}
/// MsgMintVestedRepresentation defines the message structure for the
/// MintVestedRepresentation gRPC service method. It allows an authorized
/// account to mint a user's staked vested tokens representation that can be
/// used in the liquid vesting module.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgMintVestedRepresentation")]
pub struct MsgMintVestedRepresentation {
    /// User that want to triger the tokens mint.
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// User that will receive the minted tokens.
    #[prost(string, tag = "2")]
    pub receiver: ::prost::alloc::string::String,
    /// The amount of tokens that will be minted
    #[prost(message, repeated, tag = "3")]
    pub amount: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// MsgMintVestedRepresentationResponse is the return value of
/// MsgMintVestedRepresentation.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgMintVestedRepresentationResponse")]
pub struct MsgMintVestedRepresentationResponse {}
/// MsgBurnVestedRepresentation defines the message structure for the
/// BurnVestedRepresentation gRPC service method. It allows an authorized
/// account to burn a user's staked vested tokens representation.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgBurnVestedRepresentation")]
pub struct MsgBurnVestedRepresentation {
    /// User that want to triger the tokens burn.
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// User from which we want to burn the tokens.
    #[prost(string, tag = "2")]
    pub user: ::prost::alloc::string::String,
    /// The amount of tokens that will be burned from the user's balance.
    #[prost(message, repeated, tag = "3")]
    pub amount: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// MsgBurnVestedRepresentationResponse is the return value of
/// MsgBurnVestedRepresentation.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgBurnVestedRepresentationResponse")]
pub struct MsgBurnVestedRepresentationResponse {}
/// MsgWithdrawInsuranceFund defines the message structure for the
/// WithdrawInsuranceFund gRPC service method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgWithdrawInsuranceFund")]
pub struct MsgWithdrawInsuranceFund {
    /// User that want to withdraw the tokens.
    #[prost(string, tag = "1")]
    pub sender: ::prost::alloc::string::String,
    /// The amount of tokens that will be withdrawn from the user's insurance fund.
    #[prost(message, repeated, tag = "2")]
    pub amount: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgWithdrawInsuranceFundResponse")]
pub struct MsgWithdrawInsuranceFundResponse {}
/// MsgUpdateParams defines the message structure for the UpdateParams gRPC
/// service method. It allows the authority to update the module parameters.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgUpdateParams")]
pub struct MsgUpdateParams {
    /// Authority is the address that controls the module (defaults to x/gov unless
    /// overwritten).
    #[prost(string, tag = "1")]
    pub authority: ::prost::alloc::string::String,
    /// Params define the parameters to update.
    ///
    /// NOTE: All parameters must be supplied.
    #[prost(message, optional, tag = "2")]
    pub params: ::core::option::Option<Params>,
}
/// MsgUpdateParamsResponse is the return value of MsgUpdateParams.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.MsgUpdateParamsResponse")]
pub struct MsgUpdateParamsResponse {}
/// QueryUserInsuranceFundRequest is the request type for the
/// Query/UserInsuranceFund RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryUserInsuranceFundRequest")]
#[proto_query(
    path = "/milkyway.liquidvesting.v1.Query/UserInsuranceFund",
    response_type = QueryUserInsuranceFundResponse
)]
pub struct QueryUserInsuranceFundRequest {
    /// user_address is the address of the user to query.
    #[prost(string, tag = "1")]
    pub user_address: ::prost::alloc::string::String,
}
/// QueryUserInsuranceFundResponse is the response type for the
/// Query/UserInsuranceFund RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryUserInsuranceFundResponse")]
pub struct QueryUserInsuranceFundResponse {
    /// balance is the amount of tokens that is in the user's insurance fund.
    #[prost(message, repeated, tag = "1")]
    pub balance: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
    /// used is the amount of tokens is being used to cover the user's
    /// restaked assets.
    #[prost(message, repeated, tag = "2")]
    pub used: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// QueryUserInsuranceFundsRequest is the request type for the
/// Query/UserInsuranceFunds RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryUserInsuranceFundsRequest")]
#[proto_query(
    path = "/milkyway.liquidvesting.v1.Query/UserInsuranceFunds",
    response_type = QueryUserInsuranceFundsResponse
)]
pub struct QueryUserInsuranceFundsRequest {
    #[prost(message, optional, tag = "1")]
    pub pagination:
        ::core::option::Option<super::super::super::cosmos::base::query::v1beta1::PageRequest>,
}
/// UserInsuranceFundData is the structure that contains the information about
/// a user's insurance fund.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.UserInsuranceFundData")]
pub struct UserInsuranceFundData {
    /// user_address is the address of who owns the insurance fund.
    #[prost(string, tag = "1")]
    pub user_address: ::prost::alloc::string::String,
    /// balance is the amount of tokens that is in the user's insurance fund.
    #[prost(message, repeated, tag = "2")]
    pub balance: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
    /// used is the amount of tokens that is to cover the user's
    /// restaked assets.
    #[prost(message, repeated, tag = "3")]
    pub used: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// QueryUserInsuranceFundsResponse is the response type for the
/// Query/UserInsuranceFunds RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryUserInsuranceFundsResponse")]
pub struct QueryUserInsuranceFundsResponse {
    /// insurance_funds is the list of users insurance funds.
    #[prost(message, repeated, tag = "1")]
    pub insurance_funds: ::prost::alloc::vec::Vec<UserInsuranceFundData>,
    /// Pagination defines the pagination response
    #[prost(message, optional, tag = "2")]
    pub pagination:
        ::core::option::Option<super::super::super::cosmos::base::query::v1beta1::PageResponse>,
}
/// QueryUserRestakableAssetsRequest is the request type for the
/// Query/UserRestakableAssets RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryUserRestakableAssetsRequest")]
#[proto_query(
    path = "/milkyway.liquidvesting.v1.Query/UserRestakableAssets",
    response_type = QueryUserRestakableAssetsResponse
)]
pub struct QueryUserRestakableAssetsRequest {
    /// user_address is the address of the user to query.
    #[prost(string, tag = "1")]
    pub user_address: ::prost::alloc::string::String,
}
/// QueryUserRestakableAssetsResponse is the response type for the
/// Query/UserRestakableAssets RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryUserRestakableAssetsResponse")]
pub struct QueryUserRestakableAssetsResponse {
    /// amount is the amount of tokens that the user can restake.
    #[prost(message, repeated, tag = "1")]
    pub amount: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// QueryInsuranceFundRequest is the request type for the
/// Query/InsuranceFund RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryInsuranceFundRequest")]
#[proto_query(
    path = "/milkyway.liquidvesting.v1.Query/InsuranceFund",
    response_type = QueryInsuranceFundResponse
)]
pub struct QueryInsuranceFundRequest {}
/// QueryInsuranceFundResponse is the response type for the
/// Query/InsuranceFund RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryInsuranceFundResponse")]
pub struct QueryInsuranceFundResponse {
    /// amount is the amount of tokens that are in the insurance fund.
    #[prost(message, repeated, tag = "1")]
    pub amount: ::prost::alloc::vec::Vec<super::super::super::cosmos::base::v1beta1::Coin>,
}
/// QueryParamsRequest is the request type for the Query/Params RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryParamsRequest")]
#[proto_query(
    path = "/milkyway.liquidvesting.v1.Query/Params",
    response_type = QueryParamsResponse
)]
pub struct QueryParamsRequest {}
/// QueryParamsResponse is the response type for the Query/Params RPC method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(
    Clone,
    PartialEq,
    Eq,
    ::prost::Message,
    ::serde::Serialize,
    ::serde::Deserialize,
    ::schemars::JsonSchema,
    CosmwasmExt,
)]
#[proto_message(type_url = "/milkyway.liquidvesting.v1.QueryParamsResponse")]
pub struct QueryParamsResponse {
    #[prost(message, optional, tag = "1")]
    pub params: ::core::option::Option<Params>,
}
pub struct LiquidvestingQuerier<'a, Q: cosmwasm_std::CustomQuery> {
    querier: &'a cosmwasm_std::QuerierWrapper<'a, Q>,
}
impl<'a, Q: cosmwasm_std::CustomQuery> LiquidvestingQuerier<'a, Q> {
    pub fn new(querier: &'a cosmwasm_std::QuerierWrapper<'a, Q>) -> Self {
        Self { querier }
    }
    pub fn user_insurance_fund(
        &self,
        user_address: ::prost::alloc::string::String,
    ) -> Result<QueryUserInsuranceFundResponse, cosmwasm_std::StdError> {
        QueryUserInsuranceFundRequest { user_address }.query(self.querier)
    }
    pub fn user_insurance_funds(
        &self,
        pagination: ::core::option::Option<
            super::super::super::cosmos::base::query::v1beta1::PageRequest,
        >,
    ) -> Result<QueryUserInsuranceFundsResponse, cosmwasm_std::StdError> {
        QueryUserInsuranceFundsRequest { pagination }.query(self.querier)
    }
    pub fn user_restakable_assets(
        &self,
        user_address: ::prost::alloc::string::String,
    ) -> Result<QueryUserRestakableAssetsResponse, cosmwasm_std::StdError> {
        QueryUserRestakableAssetsRequest { user_address }.query(self.querier)
    }
    pub fn insurance_fund(&self) -> Result<QueryInsuranceFundResponse, cosmwasm_std::StdError> {
        QueryInsuranceFundRequest {}.query(self.querier)
    }
    pub fn params(&self) -> Result<QueryParamsResponse, cosmwasm_std::StdError> {
        QueryParamsRequest {}.query(self.querier)
    }
}
