1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use terraswap::asset::AssetInfo;
5
6use crate::custom_bond::FeeTier;
7
8#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
9pub struct InstantiateMsg {
10 pub custom_bond_id: u64,
11 pub custom_treasury_id: u64,
12 pub treasury: String,
13 pub subsidy_router: String,
14 pub olympus_dao: String,
15}
16
17#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
18#[serde(rename_all = "snake_case")]
19pub enum ExecuteMsg {
20 UpdateConfig {
21 custom_bond_id: Option<u64>,
22 custom_treasury_id: Option<u64>,
23 policy: Option<String>,
24 },
25 CreateBondAndTreasury {
26 payout_token: String,
27 principal_token: AssetInfo,
28 initial_owner: String,
29 fee_tiers: Vec<FeeTier>,
30 fee_in_payout: bool,
31 },
32 CreateBond {
33 principal_token: AssetInfo,
34 custom_treasury: String,
35 initial_owner: String,
36 fee_tiers: Vec<FeeTier>,
37 fee_in_payout: bool,
38 },
39}
40
41#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
42#[serde(rename_all = "snake_case")]
43pub struct MigrateMsg {}
44
45#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
46#[serde(rename_all = "snake_case")]
47pub enum QueryMsg {
48 Config {},
49 State {},
50 BondInfo { bond_id: u64 },
51}
52
53#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
55pub struct ConfigResponse {
56 pub custom_bond_id: u64,
57 pub custom_treasury_id: u64,
58 pub treasury: String,
59 pub subsidy_router: String,
60 pub olympus_dao: String,
61 pub policy: String,
62}
63
64#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
65pub struct BondInfoResponse {
66 pub principal_token: AssetInfo,
67 pub custom_treasury: String,
68 pub bond: String,
69 pub initial_owner: String,
70 pub fee_tiers: Vec<FeeTier>,
71}