stripe_api/resources/checkout/
sessions.rs1use 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}