stripe/resources/
charge_ext.rs

1use serde::{Deserialize, Serialize};
2
3use crate::client::{Client, Response};
4use crate::ids::{AccountId, BankAccountId, CardId, ChargeId, SourceId, TokenId};
5use crate::params::{Object, SearchList};
6use crate::resources::{Charge, Rule};
7
8/// The set of PaymentSource parameters that can be used to create a charge.
9///
10/// For more details see <https://stripe.com/docs/api/charges/create#create_charge-source>.
11#[derive(Clone, Debug, Deserialize, Serialize)]
12#[serde(untagged)]
13pub enum ChargeSourceParams {
14    Token(TokenId),
15    Source(SourceId),
16    Card(CardId),
17    BankAccount(BankAccountId),
18    Account(AccountId),
19}
20
21/// The set of parameters that can be used when capturing a charge object.
22///
23/// For more details see <https://stripe.com/docs/api#charge_capture>.
24#[derive(Clone, Debug, Default, Deserialize, Serialize)]
25pub struct CaptureCharge<'a> {
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub amount: Option<u64>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub application_fee: Option<u64>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub receipt_email: Option<&'a str>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub statement_descriptor: Option<&'a str>,
34}
35
36impl Charge {
37    /// Capture captures a previously created charge with capture set to false.
38    ///
39    /// For more details see <https://stripe.com/docs/api#charge_capture>.
40    pub fn capture(
41        client: &Client,
42        charge_id: &ChargeId,
43        params: CaptureCharge<'_>,
44    ) -> Response<Charge> {
45        client.post_form(&format!("/charges/{}/capture", charge_id), params)
46    }
47
48    /// Searches for a charge.
49    ///
50    /// For more details see <https://stripe.com/docs/api/charges/search>.
51    pub fn search(client: &Client, params: ChargeSearchParams) -> Response<SearchList<Charge>> {
52        client.get_query("/charges/search", params)
53    }
54}
55
56impl Object for Rule {
57    type Id = String;
58    fn id(&self) -> Self::Id {
59        self.id.clone()
60    }
61    fn object(&self) -> &'static str {
62        ""
63    }
64}
65
66#[derive(Clone, Debug, Default, Serialize)]
67pub struct ChargeSearchParams<'a> {
68    pub query: String,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub limit: Option<u64>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub page: Option<u64>,
73    pub expand: &'a [&'a str],
74}
75
76impl<'a> ChargeSearchParams<'a> {
77    pub fn new() -> ChargeSearchParams<'a> {
78        ChargeSearchParams { query: String::new(), limit: None, page: None, expand: &[] }
79    }
80}