Skip to main content

made_client/
actions.rs

1use made_proto::v1::{
2    ApproveCeremonyGuardRequest, CancelCeremonyRequest, CeremonyInstanceState,
3    EnforceCeremonyDeadlinesRequest, PauseCeremonyRequest, ResumeCeremonyRequest,
4};
5
6use crate::{MadeClient, MadeClientError};
7
8impl MadeClient {
9    pub async fn pause(
10        &self,
11        request: PauseCeremonyRequest,
12    ) -> Result<CeremonyInstanceState, MadeClientError> {
13        let response = self
14            .rpc()
15            .pause_ceremony(Self::request(
16                &self.context(),
17                "/underpass.made.v1.MadeService/PauseCeremony",
18                request,
19            ))
20            .await
21            .map_err(MadeClientError::from_status)?
22            .into_inner();
23        required_instance(response.instance, "pause")
24    }
25
26    pub async fn resume(
27        &self,
28        request: ResumeCeremonyRequest,
29    ) -> Result<CeremonyInstanceState, MadeClientError> {
30        let response = self
31            .rpc()
32            .resume_ceremony(Self::request(
33                &self.context(),
34                "/underpass.made.v1.MadeService/ResumeCeremony",
35                request,
36            ))
37            .await
38            .map_err(MadeClientError::from_status)?
39            .into_inner();
40        required_instance(response.instance, "resume")
41    }
42
43    pub async fn cancel(
44        &self,
45        request: CancelCeremonyRequest,
46    ) -> Result<CeremonyInstanceState, MadeClientError> {
47        let response = self
48            .rpc()
49            .cancel_ceremony(Self::request(
50                &self.context(),
51                "/underpass.made.v1.MadeService/CancelCeremony",
52                request,
53            ))
54            .await
55            .map_err(MadeClientError::from_status)?
56            .into_inner();
57        required_instance(response.instance, "cancel")
58    }
59
60    pub async fn enforce_deadlines(
61        &self,
62        ceremony_id: impl Into<String>,
63    ) -> Result<CeremonyInstanceState, MadeClientError> {
64        let response = self
65            .rpc()
66            .enforce_ceremony_deadlines(Self::request(
67                &self.context(),
68                "/underpass.made.v1.MadeService/EnforceCeremonyDeadlines",
69                EnforceCeremonyDeadlinesRequest {
70                    ceremony_id: ceremony_id.into(),
71                },
72            ))
73            .await
74            .map_err(MadeClientError::from_status)?
75            .into_inner();
76        required_instance(response.instance, "enforce deadlines")
77    }
78
79    pub async fn approve(
80        &self,
81        request: ApproveCeremonyGuardRequest,
82    ) -> Result<CeremonyInstanceState, MadeClientError> {
83        let response = self
84            .rpc()
85            .approve_ceremony_guard(Self::request(
86                &self.context(),
87                "/underpass.made.v1.MadeService/ApproveCeremonyGuard",
88                request,
89            ))
90            .await
91            .map_err(MadeClientError::from_status)?
92            .into_inner();
93        required_instance(response.instance, "approve guard")
94    }
95}
96
97fn required_instance(
98    instance: Option<CeremonyInstanceState>,
99    operation: &str,
100) -> Result<CeremonyInstanceState, MadeClientError> {
101    instance.ok_or_else(|| {
102        MadeClientError::ProtocolViolation(format!("{operation} response has no instance"))
103    })
104}