1#[derive(Clone,Debug)]
5#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
6#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
7pub struct Event {
8 pub created: i64,
10 #[cfg_attr(
12 any(feature = "deserialize", feature = "serialize"),
13 serde(with = "payjp_types::with_serde_json")
14 )]
15 pub data: miniserde::json::Value,
16 pub id: payjp_shared::EventId,
18 pub livemode: bool,
20 pub pending_webhooks: Option<i64>,
22 #[cfg_attr(feature = "deserialize", serde(rename = "type"))]
24 pub type_: EventType,
25}
26#[doc(hidden)]
27pub struct EventBuilder {
28 created: Option<i64>,
29data: Option<miniserde::json::Value>,
30id: Option<payjp_shared::EventId>,
31livemode: Option<bool>,
32pending_webhooks: Option<Option<i64>>,
33type_: Option<EventType>,
34
35}
36
37#[allow(unused_variables, irrefutable_let_patterns, clippy::let_unit_value, clippy::match_single_binding, clippy::single_match)]
38const _: () = {
39 use miniserde::de::{Map, Visitor};
40 use miniserde::json::Value;
41 use miniserde::{make_place, Deserialize, Result};
42 use payjp_types::{MapBuilder, ObjectDeser};
43 use payjp_types::miniserde_helpers::FromValueOpt;
44
45 make_place!(Place);
46
47 impl Deserialize for Event {
48 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
49 Place::new(out)
50 }
51}
52
53struct Builder<'a> {
54 out: &'a mut Option<Event>,
55 builder: EventBuilder,
56}
57
58impl Visitor for Place<Event> {
59 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
60 Ok(Box::new(Builder {
61 out: &mut self.out,
62 builder: EventBuilder::deser_default(),
63 }))
64 }
65}
66
67impl MapBuilder for EventBuilder {
68 type Out = Event;
69 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
70 Ok(match k {
71 "created" => Deserialize::begin(&mut self.created),
72"data" => Deserialize::begin(&mut self.data),
73"id" => Deserialize::begin(&mut self.id),
74"livemode" => Deserialize::begin(&mut self.livemode),
75"pending_webhooks" => Deserialize::begin(&mut self.pending_webhooks),
76"type" => Deserialize::begin(&mut self.type_),
77
78 _ => <dyn Visitor>::ignore(),
79 })
80 }
81
82 fn deser_default() -> Self {
83 Self {
84 created: Deserialize::default(),
85data: Deserialize::default(),
86id: Deserialize::default(),
87livemode: Deserialize::default(),
88pending_webhooks: Deserialize::default(),
89type_: Deserialize::default(),
90
91 }
92 }
93
94 fn take_out(&mut self) -> Option<Self::Out> {
95 let (Some(created),
96Some(data),
97Some(id),
98Some(livemode),
99Some(pending_webhooks),
100Some(type_),
101) = (self.created,
102self.data.take(),
103self.id.take(),
104self.livemode,
105self.pending_webhooks,
106self.type_,
107) else {
108 return None;
109 };
110 Some(Self::Out { created,data,id,livemode,pending_webhooks,type_ })
111 }
112}
113
114impl<'a> Map for Builder<'a> {
115 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
116 self.builder.key(k)
117 }
118
119 fn finish(&mut self) -> Result<()> {
120 *self.out = self.builder.take_out();
121 Ok(())
122 }
123}
124
125impl ObjectDeser for Event {
126 type Builder = EventBuilder;
127}
128
129impl FromValueOpt for Event {
130 fn from_value(v: Value) -> Option<Self> {
131 let Value::Object(obj) = v else {
132 return None;
133 };
134 let mut b = EventBuilder::deser_default();
135 for (k, v) in obj {
136 match k.as_str() {
137 "created" => b.created = FromValueOpt::from_value(v),
138"data" => b.data = FromValueOpt::from_value(v),
139"id" => b.id = FromValueOpt::from_value(v),
140"livemode" => b.livemode = FromValueOpt::from_value(v),
141"pending_webhooks" => b.pending_webhooks = FromValueOpt::from_value(v),
142"type" => b.type_ = FromValueOpt::from_value(v),
143
144 _ => {}
145 }
146 }
147 b.take_out()
148 }
149}
150
151};
152#[derive(Copy,Clone,Eq, PartialEq,)]#[non_exhaustive]pub enum EventType {
172ChargeSucceeded,
173ChargeFailed,
174ChargeUpdated,
175ChargeRefunded,
176ChargeCaptured,
177DisputeCreated,
178TokenCreated,
179CustomerCreated,
180CustomerUpdated,
181CustomerDeleted,
182CustomerCardCreated,
183CustomerCardUpdated,
184CustomerCardDeleted,
185PlanCreated,
186PlanUpdated,
187PlanDeleted,
188SubscriptionCreated,
189SubscriptionUpdated,
190SubscriptionDeleted,
191SubscriptionPaused,
192SubscriptionResumed,
193SubscriptionCanceled,
194SubscriptionRenewed,
195TransferSucceeded,
196TenantCreated,
197TenantDeleted,
198TenantUpdated,
199TenantTransferSucceeded,
200TermCreated,
201TermClosed,
202StatementCreated,
203BalanceCreated,
204BalanceFixed,
205BalanceClosed,
206BalanceMerged,
207Unknown,
208
209}
210impl EventType {
211 pub fn as_str(self) -> &'static str {
212 use EventType::*;
213 match self {
214ChargeSucceeded => "charge.succeeded",
215ChargeFailed => "charge.failed",
216ChargeUpdated => "charge.updated",
217ChargeRefunded => "charge.refunded",
218ChargeCaptured => "charge.captured",
219DisputeCreated => "dispute.created",
220TokenCreated => "token.created",
221CustomerCreated => "customer.created",
222CustomerUpdated => "customer.updated",
223CustomerDeleted => "customer.deleted",
224CustomerCardCreated => "customer.card.created",
225CustomerCardUpdated => "customer.card.updated",
226CustomerCardDeleted => "customer.card.deleted",
227PlanCreated => "plan.created",
228PlanUpdated => "plan.updated",
229PlanDeleted => "plan.deleted",
230SubscriptionCreated => "subscription.created",
231SubscriptionUpdated => "subscription.updated",
232SubscriptionDeleted => "subscription.deleted",
233SubscriptionPaused => "subscription.paused",
234SubscriptionResumed => "subscription.resumed",
235SubscriptionCanceled => "subscription.canceled",
236SubscriptionRenewed => "subscription.renewed",
237TransferSucceeded => "transfer.succeeded",
238TenantCreated => "tenant.created",
239TenantDeleted => "tenant.deleted",
240TenantUpdated => "tenant.updated",
241TenantTransferSucceeded => "tenant_transfer.succeeded",
242TermCreated => "term.created",
243TermClosed => "term.closed",
244StatementCreated => "statement.created",
245BalanceCreated => "balance.created",
246BalanceFixed => "balance.fixed",
247BalanceClosed => "balance.closed",
248BalanceMerged => "balance.merged",
249Unknown => "unknown",
250
251 }
252 }
253}
254
255impl std::str::FromStr for EventType {
256 type Err = std::convert::Infallible;
257 fn from_str(s: &str) -> Result<Self, Self::Err> {
258 use EventType::*;
259 match s {
260 "charge.succeeded" => Ok(ChargeSucceeded),
261"charge.failed" => Ok(ChargeFailed),
262"charge.updated" => Ok(ChargeUpdated),
263"charge.refunded" => Ok(ChargeRefunded),
264"charge.captured" => Ok(ChargeCaptured),
265"dispute.created" => Ok(DisputeCreated),
266"token.created" => Ok(TokenCreated),
267"customer.created" => Ok(CustomerCreated),
268"customer.updated" => Ok(CustomerUpdated),
269"customer.deleted" => Ok(CustomerDeleted),
270"customer.card.created" => Ok(CustomerCardCreated),
271"customer.card.updated" => Ok(CustomerCardUpdated),
272"customer.card.deleted" => Ok(CustomerCardDeleted),
273"plan.created" => Ok(PlanCreated),
274"plan.updated" => Ok(PlanUpdated),
275"plan.deleted" => Ok(PlanDeleted),
276"subscription.created" => Ok(SubscriptionCreated),
277"subscription.updated" => Ok(SubscriptionUpdated),
278"subscription.deleted" => Ok(SubscriptionDeleted),
279"subscription.paused" => Ok(SubscriptionPaused),
280"subscription.resumed" => Ok(SubscriptionResumed),
281"subscription.canceled" => Ok(SubscriptionCanceled),
282"subscription.renewed" => Ok(SubscriptionRenewed),
283"transfer.succeeded" => Ok(TransferSucceeded),
284"tenant.created" => Ok(TenantCreated),
285"tenant.deleted" => Ok(TenantDeleted),
286"tenant.updated" => Ok(TenantUpdated),
287"tenant_transfer.succeeded" => Ok(TenantTransferSucceeded),
288"term.created" => Ok(TermCreated),
289"term.closed" => Ok(TermClosed),
290"statement.created" => Ok(StatementCreated),
291"balance.created" => Ok(BalanceCreated),
292"balance.fixed" => Ok(BalanceFixed),
293"balance.closed" => Ok(BalanceClosed),
294"balance.merged" => Ok(BalanceMerged),
295_ => Ok(Self::Unknown)
296
297 }
298 }
299}
300impl std::fmt::Display for EventType {
301 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
302 f.write_str(self.as_str())
303 }
304}
305
306impl std::fmt::Debug for EventType {
307 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
308 f.write_str(self.as_str())
309 }
310}
311#[cfg(feature = "serialize")]
312impl serde::Serialize for EventType {
313 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
314 serializer.serialize_str(self.as_str())
315 }
316}
317impl miniserde::Deserialize for EventType {
318 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
319 crate::Place::new(out)
320 }
321}
322
323impl miniserde::de::Visitor for crate::Place<EventType> {
324 fn string(&mut self, s: &str) -> miniserde::Result<()> {
325 use std::str::FromStr;
326 self.out = Some(EventType::from_str(s).unwrap());
327 Ok(())
328 }
329}
330
331payjp_types::impl_from_val_with_from_str!(EventType);
332#[cfg(feature = "deserialize")]
333impl<'de> serde::Deserialize<'de> for EventType {
334 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
335 use std::str::FromStr;
336 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
337 Ok(Self::from_str(&s).unwrap())
338 }
339}
340impl payjp_types::Object for Event {
341 type Id = payjp_shared::EventId;
342 fn id(&self) -> &Self::Id {
343 &self.id
344 }
345
346 fn into_id(self) -> Self::Id {
347 self.id
348 }
349}
350payjp_types::def_id!(EventId);