cw_auth_types/sessions/
queries.rs1use 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}