payjp_core/statement/
requests.rs1use payjp_client_core::{PayjpClient, BlockingClient, PayjpRequest, RequestBuilder, PayjpMethod};
2
3#[derive(Clone,Debug,)]#[derive(serde::Serialize)]
4 struct ListStatementBuilder {
5#[serde(skip_serializing_if = "Option::is_none")]
6 limit: Option<i64>,
7#[serde(skip_serializing_if = "Option::is_none")]
8 offset: Option<i64>,
9#[serde(skip_serializing_if = "Option::is_none")]
10 since: Option<i64>,
11#[serde(skip_serializing_if = "Option::is_none")]
12 until: Option<i64>,
13#[serde(skip_serializing_if = "Option::is_none")]
14 owner: Option<ListStatementOwner>,
15#[serde(skip_serializing_if = "Option::is_none")]
16 source_transfer: Option<String>,
17#[serde(skip_serializing_if = "Option::is_none")]
18 tenant: Option<String>,
19#[serde(skip_serializing_if = "Option::is_none")]
20 term: Option<String>,
21#[serde(rename = "type")]
22#[serde(skip_serializing_if = "Option::is_none")]
23 type_: Option<payjp_core::StatementType>,
24
25}
26impl ListStatementBuilder {
27 fn new() -> Self {
28 Self {
29 limit: None,offset: None,since: None,until: None,owner: None,source_transfer: None,tenant: None,term: None,type_: None,
30 }
31}
32
33}
34 #[derive(Copy,Clone,Eq, PartialEq,)]pub enum ListStatementOwner {
41Merchant,
42Tenant,
43
44}
45impl ListStatementOwner {
46 pub fn as_str(self) -> &'static str {
47 use ListStatementOwner::*;
48 match self {
49Merchant => "merchant",
50Tenant => "tenant",
51
52 }
53 }
54}
55
56impl std::str::FromStr for ListStatementOwner {
57 type Err = payjp_types::ParseError;
58 fn from_str(s: &str) -> Result<Self, Self::Err> {
59 use ListStatementOwner::*;
60 match s {
61 "merchant" => Ok(Merchant),
62"tenant" => Ok(Tenant),
63_ => Err(payjp_types::ParseError)
64
65 }
66 }
67}
68impl std::fmt::Display for ListStatementOwner {
69 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
70 f.write_str(self.as_str())
71 }
72}
73
74impl std::fmt::Debug for ListStatementOwner {
75 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
76 f.write_str(self.as_str())
77 }
78}
79impl serde::Serialize for ListStatementOwner {
80 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
81 serializer.serialize_str(self.as_str())
82 }
83}
84#[cfg(feature = "deserialize")]
85impl<'de> serde::Deserialize<'de> for ListStatementOwner {
86 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
87 use std::str::FromStr;
88 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
89 Self::from_str(&s).map_err(|_| serde::de::Error::custom("Unknown value for ListStatementOwner"))
90 }
91}
92 #[derive(Clone,Debug,)]#[derive(serde::Serialize)]
94pub struct ListStatement {
95 inner: ListStatementBuilder,
96
97}
98impl ListStatement {
99 pub fn new() -> Self {
101 Self {
102 inner: ListStatementBuilder::new()
103 }
104}
105 pub fn limit(mut self, limit: impl Into<i64>) -> Self {
107 self.inner.limit = Some(limit.into());
108 self
109}
110 pub fn offset(mut self, offset: impl Into<i64>) -> Self {
112 self.inner.offset = Some(offset.into());
113 self
114}
115 pub fn since(mut self, since: impl Into<i64>) -> Self {
117 self.inner.since = Some(since.into());
118 self
119}
120 pub fn until(mut self, until: impl Into<i64>) -> Self {
122 self.inner.until = Some(until.into());
123 self
124}
125 pub fn owner(mut self, owner: impl Into<ListStatementOwner>) -> Self {
132 self.inner.owner = Some(owner.into());
133 self
134}
135 pub fn source_transfer(mut self, source_transfer: impl Into<String>) -> Self {
139 self.inner.source_transfer = Some(source_transfer.into());
140 self
141}
142 pub fn tenant(mut self, tenant: impl Into<String>) -> Self {
144 self.inner.tenant = Some(tenant.into());
145 self
146}
147 pub fn term(mut self, term: impl Into<String>) -> Self {
149 self.inner.term = Some(term.into());
150 self
151}
152 pub fn type_(mut self, type_: impl Into<payjp_core::StatementType>) -> Self {
154 self.inner.type_ = Some(type_.into());
155 self
156}
157
158}
159 impl Default for ListStatement {
160 fn default() -> Self {
161 Self::new()
162 }
163}impl ListStatement {
164 pub async fn send<C: PayjpClient>(&self, client: &C) -> Result<<Self as PayjpRequest>::Output, C::Err> {
166 self.customize().send(client).await
167 }
168
169 pub fn send_blocking<C: BlockingClient>(&self, client: &C) -> Result<<Self as PayjpRequest>::Output, C::Err> {
171 self.customize().send_blocking(client)
172 }
173
174 pub fn paginate(&self) -> payjp_client_core::ListPaginator<payjp_types::List<payjp_core::Statement>> {
175
176 payjp_client_core::ListPaginator::new_list("/statements", &self.inner)
177}
178
179}
180
181impl PayjpRequest for ListStatement {
182 type Output = payjp_types::List<payjp_core::Statement>;
183
184 fn build(&self) -> RequestBuilder {
185 RequestBuilder::new(PayjpMethod::Get, "/statements").query(&self.inner)
186}
187
188}
189 #[derive(Clone,Debug,)]#[derive(serde::Serialize)]
191pub struct RetrieveStatement {
192 statement: payjp_core::StatementId,
193
194}
195impl RetrieveStatement {
196 pub fn new(statement:impl Into<payjp_core::StatementId>) -> Self {
198 Self {
199 statement: statement.into(),
200 }
201}
202
203}
204 impl RetrieveStatement {
205 pub async fn send<C: PayjpClient>(&self, client: &C) -> Result<<Self as PayjpRequest>::Output, C::Err> {
207 self.customize().send(client).await
208 }
209
210 pub fn send_blocking<C: BlockingClient>(&self, client: &C) -> Result<<Self as PayjpRequest>::Output, C::Err> {
212 self.customize().send_blocking(client)
213 }
214
215
216}
217
218impl PayjpRequest for RetrieveStatement {
219 type Output = payjp_core::Statement;
220
221 fn build(&self) -> RequestBuilder {
222 let statement = &self.statement;
223RequestBuilder::new(PayjpMethod::Get, format!("/statements/{statement}"))
224}
225
226}
227#[derive(Copy,Clone,Debug,)]#[derive(serde::Serialize)]
228 struct StatementUrlsStatementBuilder {
229#[serde(skip_serializing_if = "Option::is_none")]
230 platformer: Option<bool>,
231
232}
233impl StatementUrlsStatementBuilder {
234 fn new() -> Self {
235 Self {
236 platformer: None,
237 }
238}
239
240}
241 #[derive(Clone,Debug,)]#[derive(serde::Serialize)]
243pub struct StatementUrlsStatement {
244 inner: StatementUrlsStatementBuilder,
245 statement: payjp_core::StatementId,
246
247}
248impl StatementUrlsStatement {
249 pub fn new(statement:impl Into<payjp_core::StatementId>) -> Self {
251 Self {
252 statement: statement.into(),inner: StatementUrlsStatementBuilder::new()
253 }
254}
255 pub fn platformer(mut self, platformer: impl Into<bool>) -> Self {
257 self.inner.platformer = Some(platformer.into());
258 self
259}
260
261}
262 impl StatementUrlsStatement {
263 pub async fn send<C: PayjpClient>(&self, client: &C) -> Result<<Self as PayjpRequest>::Output, C::Err> {
265 self.customize().send(client).await
266 }
267
268 pub fn send_blocking<C: BlockingClient>(&self, client: &C) -> Result<<Self as PayjpRequest>::Output, C::Err> {
270 self.customize().send_blocking(client)
271 }
272
273
274}
275
276impl PayjpRequest for StatementUrlsStatement {
277 type Output = payjp_shared::StatementUrl;
278
279 fn build(&self) -> RequestBuilder {
280 let statement = &self.statement;
281RequestBuilder::new(PayjpMethod::Post, format!("/statements/{statement}/statement_urls")).form(&self.inner)
282}
283
284}
285