cw_auth_types/sessions/
queries.rs

1use saa_schema::saa_type;
2use saa_schema::strum::{IntoDiscriminant, VariantNames, VariantArray};
3use saa_schema::strum_macros::{Display, EnumString, EnumDiscriminants};
4use saa_schema::QueryResponses;
5use smart_account_auth::cosmwasm_std::Binary;
6use smart_account_auth::msgs::{Action, AllQueryDerivation};
7use smart_account_auth::SessionError;
8use smart_account_auth::{msgs::{DerivableMsg, ActionDerivation}};
9
10
11
12#[saa_type]
13#[derive(QueryResponses, EnumDiscriminants)]
14#[strum_discriminants(
15    name(SessionQueryName),
16    derive(Display, EnumString),
17    strum(serialize_all = "snake_case")
18)]
19pub enum SessionQueryMsg<M> 
20where 
21    M: QueryUsesActions,
22    M::ActionMsg: IntoDiscriminant,
23    <M::ActionMsg as IntoDiscriminant>::Discriminant: VariantArray + 'static,
24{
25    #[returns(Vec<String>)]
26    AllQueries {
27        method: Option<AllQueryDerivation>,
28    },
29
30    #[returns(Vec<String>)]
31    AllActions {
32        method: Option<AllQueryDerivation>,
33    },
34    
35    #[returns(String)]
36    Derive {
37        message: M::ActionMsg,
38        method: Option<ActionDerivation>,
39    },
40
41}
42
43
44pub trait QueryUsesActions
45where
46    Self : DerivableMsg + VariantNames + IntoDiscriminant<Discriminant: VariantArray + 'static>,
47    Self::ActionMsg :  DerivableMsg + saa_schema::schemars::JsonSchema +
48         VariantNames + IntoDiscriminant<Discriminant: VariantArray + 'static>,
49{
50    type ActionMsg;
51}
52
53
54pub trait SessionQueriesMatch : QueryUsesActions
55where
56    <<Self as QueryUsesActions>::ActionMsg as IntoDiscriminant>::Discriminant: 'static,
57{
58    fn match_queries(&self) -> Option<SessionQueryMsg<Self>>;
59}
60
61
62#[saa_type]
63pub struct QueryResTemplate {
64    pub data: Option<Binary>,
65    pub error: Option<String>,
66}
67
68
69
70
71#[saa_type]
72pub struct  MsgToDerive<M : DerivableMsg> {
73    pub message : M,
74    pub method  : Option<ActionDerivation>,
75}
76
77
78impl<M : DerivableMsg> TryInto<Action> for MsgToDerive<M> {
79    type Error = SessionError;
80    fn try_into(self) -> Result<Action, Self::Error> {
81        Action::new(&self.message, self.method.unwrap_or_default())
82    }
83}