1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
use error::Error;
use client::Client;
use params::{List, Metadata, Timestamp};
use resources::{Currency, Discount, Plan};
#[derive(Default, Serialize)]
pub struct InvoiceParams<'a> {
#[serde(skip_serializing_if = "Option::is_none")] pub application_fee: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")] pub customer: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")] pub description: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")] pub statement_descriptor: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")] pub subscription: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")] pub tax_percent: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")] pub closed: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")] pub forgiven: Option<bool>,
}
#[derive(Debug, Deserialize)]
pub struct Period {
pub start: Timestamp,
pub end: Timestamp,
}
#[derive(Debug, Deserialize)]
pub struct InvoiceLine {
pub id: String,
pub amount: u64,
pub currency: Currency,
pub description: Option<String>,
pub discountable: bool,
pub livemode: bool,
pub metadata: Metadata,
pub period: Period,
pub plan: Option<Plan>,
pub proration: bool,
pub quantity: Option<u64>,
pub subscription: Option<String>,
pub subscription_item: Option<String>,
#[serde(rename = "type")] pub item_type: String,
}
#[derive(Debug, Deserialize)]
pub struct Invoice {
pub id: String,
pub amount_due: u64,
pub application_fee: Option<u64>,
pub attempt_count: u64,
pub attempted: bool,
pub charge: Option<String>,
pub closed: bool,
pub currency: Currency,
pub customer: String,
pub date: Timestamp,
pub description: Option<String>,
pub discount: Option<Discount>,
pub ending_balance: Option<i64>,
pub forgiven: bool,
pub lines: List<InvoiceLine>,
pub livemode: bool,
pub metadata: Metadata,
pub next_payment_attempt: Option<Timestamp>,
pub paid: bool,
pub period_end: Timestamp,
pub period_start: Timestamp,
pub receipt_number: Option<String>,
pub starting_balance: i64,
pub statment_descriptor: Option<String>,
pub subscription: Option<String>,
pub subscription_proration_date: Option<Timestamp>,
pub subtotal: i64,
pub tax: Option<i64>,
pub tax_percent: Option<f64>,
pub total: i64,
pub webhooks_delivered_at: Option<Timestamp>,
}
impl Invoice {
pub fn create(client: &Client, params: InvoiceParams) -> Result<Invoice, Error> {
client.post("/invoices", params)
}
pub fn retrieve(client: &Client, invoice_id: &str) -> Result<Invoice, Error> {
client.get(&format!("/invoices/{}", invoice_id))
}
pub fn pay(client: &Client, invoice_id: &str) -> Result<Invoice, Error> {
client.post(&format!("/invoices/{}/pay", invoice_id), ())
}
}