payjp_core/statement/
requests.rs

1use 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    /// 取引明細の発行対象で絞り込みます。以下の値が指定できます。
35///
36/// | owner | 絞り込み対象 |
37/// | ----- | ------------ |
38/// | merchant | 加盟店に向けて発行されたもの |
39/// | tenant | テナントに向けて発行されたもの |
40#[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    /// 取引明細リストを取得します。
93#[derive(Clone,Debug,)]#[derive(serde::Serialize)]
94pub struct ListStatement {
95 inner: ListStatementBuilder,
96
97}
98impl ListStatement {
99    /// Construct a new `ListStatement`.
100pub fn new() -> Self {
101    Self {
102        inner: ListStatementBuilder::new()
103    }
104}
105    /// 取得するデータ数の最大値(1~100まで)。指定がない場合は 10 となる。
106pub fn limit(mut self, limit: impl Into<i64>) -> Self {
107    self.inner.limit = Some(limit.into());
108    self
109}
110    /// 基準点からのデータ取得を行う開始位置。指定がない場合は 0 となる。
111pub fn offset(mut self, offset: impl Into<i64>) -> Self {
112    self.inner.offset = Some(offset.into());
113    self
114}
115    /// ここに指定したタイムスタンプ以降に作成されたデータを取得
116pub fn since(mut self, since: impl Into<i64>) -> Self {
117    self.inner.since = Some(since.into());
118    self
119}
120    /// ここに指定したタイムスタンプ以前に作成されたデータを取得
121pub fn until(mut self, until: impl Into<i64>) -> Self {
122    self.inner.until = Some(until.into());
123    self
124}
125    /// 取引明細の発行対象で絞り込みます。以下の値が指定できます。
126    ///
127    /// | owner | 絞り込み対象 |
128    /// | ----- | ------------ |
129    /// | merchant | 加盟店に向けて発行されたもの |
130    /// | tenant | テナントに向けて発行されたもの |
131pub fn owner(mut self, owner: impl Into<ListStatementOwner>) -> Self {
132    self.inner.owner = Some(owner.into());
133    self
134}
135    /// 取引明細の生成元オブジェクトで絞り込みます。
136    ///
137    /// transferオブジェクトもしくは tenant_transferオブジェクトのIDを指定します。
138pub fn source_transfer(mut self, source_transfer: impl Into<String>) -> Self {
139    self.inner.source_transfer = Some(source_transfer.into());
140    self
141}
142    /// テナントのIDで絞り込みます。
143pub fn tenant(mut self, tenant: impl Into<String>) -> Self {
144    self.inner.tenant = Some(tenant.into());
145    self
146}
147    /// 集計区間のIDで絞り込みます。
148pub fn term(mut self, term: impl Into<String>) -> Self {
149    self.inner.term = Some(term.into());
150    self
151}
152    /// typeの値で絞り込みます。
153pub 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    /// Send the request and return the deserialized response.
165    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    /// Send the request and return the deserialized response, blocking until completion.
170    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    /// 取引明細を取得します。
190#[derive(Clone,Debug,)]#[derive(serde::Serialize)]
191pub struct RetrieveStatement {
192 statement: payjp_core::StatementId,
193
194}
195impl RetrieveStatement {
196    /// Construct a new `RetrieveStatement`.
197pub fn new(statement:impl Into<payjp_core::StatementId>) -> Self {
198    Self {
199        statement: statement.into(),
200    }
201}
202
203}
204    impl RetrieveStatement {
205    /// Send the request and return the deserialized response.
206    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    /// Send the request and return the deserialized response, blocking until completion.
211    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        /// 取引明細およびインボイスをダウンロードできる一時URLを発行します。
242#[derive(Clone,Debug,)]#[derive(serde::Serialize)]
243pub struct StatementUrlsStatement {
244 inner: StatementUrlsStatementBuilder,
245 statement: payjp_core::StatementId,
246
247}
248impl StatementUrlsStatement {
249    /// Construct a new `StatementUrlsStatement`.
250pub fn new(statement:impl Into<payjp_core::StatementId>) -> Self {
251    Self {
252        statement: statement.into(),inner: StatementUrlsStatementBuilder::new()
253    }
254}
255        /// `true`を指定するとプラットフォーム手数料に関する明細がダウンロードできるURLを発行します。.
256pub 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    /// Send the request and return the deserialized response.
264    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    /// Send the request and return the deserialized response, blocking until completion.
269    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