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#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
72pub struct ConfigResponse {
73 pub token_addr: Addr,
74 pub owner: Addr,
75}
76
77#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
79pub struct VestingAccountResponse {
80 pub address: Addr,
81 pub info: VestingInfo,
82}
83
84#[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#[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}