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}