astroport_types/
vesting.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::{Addr, Order, Uint128};
5use cw20::Cw20ReceiveMsg;
6
7#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
8pub struct InstantiateMsg {
9    pub token_addr: String,
10    pub owner: String,
11}
12
13#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
14#[serde(rename_all = "snake_case")]
15pub enum ExecuteMsg {
16    Claim {
17        recipient: Option<String>,
18        amount: Option<Uint128>,
19    },
20    Receive(Cw20ReceiveMsg),
21    ProposeNewOwner {
22        owner: String,
23        expires_in: u64,
24    },
25    DropOwnershipProposal {},
26    ClaimOwnership {},
27}
28
29#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
30pub struct VestingAccount {
31    pub address: String,
32    pub schedules: Vec<VestingSchedule>,
33}
34
35#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
36pub struct VestingInfo {
37    pub schedules: Vec<VestingSchedule>,
38    pub released_amount: Uint128,
39}
40
41#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
42pub struct VestingSchedule {
43    pub start_point: VestingSchedulePoint,
44    pub end_point: Option<VestingSchedulePoint>,
45}
46
47#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
48pub struct VestingSchedulePoint {
49    pub time: u64,
50    pub amount: Uint128,
51}
52#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
53#[serde(rename_all = "snake_case")]
54pub enum QueryMsg {
55    Config {},
56    VestingAccount {
57        address: String,
58    },
59    VestingAccounts {
60        start_after: Option<String>,
61        limit: Option<u32>,
62        order_by: Option<OrderBy>,
63    },
64    AvailableAmount {
65        address: String,
66    },
67    Timestamp {},
68}
69
70// We define a custom struct for each query response
71#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
72pub struct ConfigResponse {
73    pub token_addr: Addr,
74    pub owner: Addr,
75}
76
77// We define a custom struct for each query response
78#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
79pub struct VestingAccountResponse {
80    pub address: Addr,
81    pub info: VestingInfo,
82}
83
84// We define a custom struct for each query response
85#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
86pub struct VestingAccountsResponse {
87    pub vesting_accounts: Vec<VestingAccountResponse>,
88}
89
90#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
91#[serde(rename_all = "snake_case")]
92pub enum OrderBy {
93    Asc,
94    Desc,
95}
96
97// We suppress this clippy warning because Order in cosmwasm doesn't implement
98// Debug and PartialEq for usage in QueryMsg, we need to use our own OrderBy and
99// convert it finally to cosmwasm's Order
100#[allow(clippy::from_over_into)]
101impl Into<Order> for OrderBy {
102    fn into(self) -> Order {
103        if self == OrderBy::Asc {
104            Order::Ascending
105        } else {
106            Order::Descending
107        }
108    }
109}
110
111#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
112pub struct MigrateMsg {}
113
114#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
115#[serde(rename_all = "snake_case")]
116pub enum Cw20HookMsg {
117    RegisterVestingAccounts {
118        vesting_accounts: Vec<VestingAccount>,
119    },
120}