stripe_api/resources/checkout/
sessions.rs

1use crate::resources::common::object::Object;
2use crate::util::Expandable;
3use crate::resources::core::customer::Customer;
4use crate::resources::common::currency::Currency;
5use crate::resources::core::paymentintents::{PaymentIntent, PaymentIntentParam};
6use crate::resources::paymentmethods::paymentmethods::PaymentMethodsType;
7use crate::resources::billing::subscriptions::{Subscription, SubscriptionParam};
8use crate::Client;
9use crate::resources::common::path::UrlPath;
10
11#[derive(Debug, Serialize, Deserialize, PartialEq)]
12pub struct Sessions {
13    pub id: String,
14    pub object: Object,
15    pub billing_address_collection: Option<BillingAddressCollection>,
16    pub cancel_url: Option<String>,
17    pub client_reference_id: Option<String>,
18    pub customer: Option<Expandable<Customer>>,
19    pub customer_email: Option<String>,
20    pub display_items: Option<Vec<DisplayItems>>,
21    pub livemode: bool,
22    pub locale: Option<String>,
23    pub payment_intent: Expandable<PaymentIntent>,
24    pub payment_method_types: Vec<PaymentMethodsType>,
25    pub subscription: Option<Expandable<Subscription>>,
26    pub success_url: String
27}
28
29#[derive(Debug, Serialize, Deserialize, PartialEq)]
30#[serde(rename_all="lowercase")]
31pub enum BillingAddressCollection {
32    Auto,
33    Required
34}
35
36#[derive(Debug, Serialize, Deserialize, PartialEq)]
37pub struct DisplayItems {
38    pub amount: i64,
39    pub currency: Currency,
40    pub custom: CustomDisplay,
41    pub quantity: i64,
42    #[serde(rename="type")]
43    pub display_items_type: DisplayItemType,
44}
45
46#[derive(Debug, Serialize, Deserialize, PartialEq)]
47pub struct CustomDisplay {
48    pub description: Option<String>,
49    pub images: Option<String>,
50    pub name: Option<String>
51}
52
53#[derive(Debug, Serialize, Deserialize, PartialEq)]
54#[serde(rename_all="lowercase")]
55pub enum DisplayItemType {
56    Custom,
57    Plan,
58    Sku
59}
60
61#[derive(Default, Debug, Serialize, PartialEq)]
62pub struct LineItemsParam<'a> {
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub amount: Option<i64>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub currency: Option<Currency>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub name: Option<&'a str>,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub quantity: Option<i64>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub description: Option<&'a str>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub images: Option<&'a str>
75}
76
77#[derive(Default, Debug, Serialize, PartialEq)]
78pub struct SessionsParam<'a> {
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub cancel_url: Option<&'a str>,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub payment_method_types: Option<Vec<&'a str>>,
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub success_url: Option<&'a str>,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub billing_address_collection: Option<BillingAddressCollection>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub client_reference_id: Option<&'a str>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub customer: Option<&'a str>,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub customer_email: Option<&'a str>,
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub line_items: Option<LineItemsParam<'a>>,
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub locale: Option<&'a str>,
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub payment_intent_data: Option<PaymentIntentParam<'a>>,
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub subscription_data: Option<SubscriptionParam<'a>>
101}
102
103impl Sessions {
104
105    pub fn create<B: serde::Serialize>(client: &Client, param: B) -> crate::Result<Self> {
106        client.post(UrlPath::CheckoutSessions, vec![], param)
107    }
108
109    pub fn retrieve(client: &Client, id: &str) -> crate::Result<Self> {
110        client.get(UrlPath::CheckoutSessions, vec![id], serde_json::Map::new())
111    }
112
113}