stripe/resources/
charge_ext.rs1use 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#[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#[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 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 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}