1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use std::marker::PhantomData;

use cosmwasm_schema::{cw_serde, QueryResponses};

use crate::Order;

#[cw_serde]
pub struct DomainRouteSet<T> {
    pub domain: u32,
    pub route: Option<T>,
}

#[cw_serde]
pub enum RouterMsg<T> {
    SetRoute { set: DomainRouteSet<T> },
    SetRoutes { set: Vec<DomainRouteSet<T>> },
}

#[cw_serde]
#[derive(QueryResponses)]
pub enum RouterQuery<T> {
    #[returns(DomainsResponse)]
    Domains {},

    #[returns(RouteResponse<T>)]
    GetRoute { domain: u32 },

    #[returns(RoutesResponse<T>)]
    ListRoutes {
        offset: Option<u32>,
        limit: Option<u32>,
        order: Option<Order>,
    },

    #[serde(skip)]
    #[returns(cosmwasm_std::Empty)]
    Placeholder(PhantomData<T>),
}

#[cw_serde]
pub struct DomainsResponse {
    pub domains: Vec<u32>,
}

#[cw_serde]
pub struct RouteResponse<T> {
    pub route: DomainRouteSet<T>,
}

#[cw_serde]
pub struct RoutesResponse<T> {
    pub routes: Vec<DomainRouteSet<T>>,
}