1use crate::types::DesmosRoute;
2use cosmwasm_std::{CosmosMsg, CustomMsg};
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
7#[serde(rename_all = "snake_case")]
8pub struct DesmosMsgWrapper {
9 pub route: DesmosRoute,
10 pub msg: DesmosMsg,
11}
12
13impl Into<CosmosMsg<DesmosMsgWrapper>> for DesmosMsgWrapper {
14 fn into(self) -> CosmosMsg<DesmosMsgWrapper> {
15 CosmosMsg::Custom(self)
16 }
17}
18
19impl CustomMsg for DesmosMsgWrapper {}
20
21#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
22#[serde(rename_all = "snake_case")]
23#[non_exhaustive]
24pub enum DesmosMsg {
25 SaveProfile {
26 dtag: String,
27 nickname: String,
28 bio: String,
29 profile_picture: String,
30 cover_picture: String,
31 creator: String,
32 },
33 DeleteProfile {
34 creator: String,
35 },
36 RequestDtagTransfer {
37 receiver: String,
38 sender: String,
39 },
40 CancelDtagTransferRequest {
41 receiver: String,
42 sender: String,
43 },
44 AcceptDtagTransferRequest {
45 new_dtag: String,
46 sender: String,
47 receiver: String,
48 },
49 RefuseDtagTransferRequest {
50 sender: String,
51 receiver: String,
52 },
53 CreateRelationship {
54 sender: String,
55 receiver: String,
56 subspace: String,
57 },
58 DeleteRelationships {
59 user: String,
60 counterparty: String,
61 subspace: String,
62 },
63 BlockUser {
64 blocker: String,
65 blocked: String,
66 reason: String,
67 subspace: String,
68 },
69 UnblockUser {
70 blocker: String,
71 blocked: String,
72 subspace: String,
73 },
74}
75
76pub fn save_profile(dtag: String) -> CosmosMsg<DesmosMsgWrapper> {
77 DesmosMsgWrapper {
78 route: DesmosRoute::Profiles,
79 msg: DesmosMsg::SaveProfile {
80 dtag,
81 nickname: "".to_string(),
82 bio: "".to_string(),
83 profile_picture: "".to_string(),
84 cover_picture: "".to_string(),
85 creator: "".to_string()
86 }
87 }.into()
88}
89
90pub fn request_dtag_transfer(sender: String, receiver: String) -> CosmosMsg<DesmosMsgWrapper> {
91 DesmosMsgWrapper{
92 route: DesmosRoute::Profiles,
93 msg: DesmosMsg::RequestDtagTransfer { receiver, sender }
94 }.into()
95}