payjp_shared/
statement_url.rs1#[derive(Clone,Debug,)]#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
5pub struct StatementUrl {
6 pub expires: i64,
9 pub url: String,
11
12}
13#[doc(hidden)]
14pub struct StatementUrlBuilder {
15 expires: Option<i64>,
16url: Option<String>,
17
18}
19
20#[allow(unused_variables, irrefutable_let_patterns, clippy::let_unit_value, clippy::match_single_binding, clippy::single_match)]
21const _: () = {
22 use miniserde::de::{Map, Visitor};
23 use miniserde::json::Value;
24 use miniserde::{make_place, Deserialize, Result};
25 use payjp_types::{MapBuilder, ObjectDeser};
26 use payjp_types::miniserde_helpers::FromValueOpt;
27
28 make_place!(Place);
29
30 impl Deserialize for StatementUrl {
31 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
32 Place::new(out)
33 }
34}
35
36struct Builder<'a> {
37 out: &'a mut Option<StatementUrl>,
38 builder: StatementUrlBuilder,
39}
40
41impl Visitor for Place<StatementUrl> {
42 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
43 Ok(Box::new(Builder {
44 out: &mut self.out,
45 builder: StatementUrlBuilder::deser_default(),
46 }))
47 }
48}
49
50impl MapBuilder for StatementUrlBuilder {
51 type Out = StatementUrl;
52 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
53 Ok(match k {
54 "expires" => Deserialize::begin(&mut self.expires),
55"url" => Deserialize::begin(&mut self.url),
56
57 _ => <dyn Visitor>::ignore(),
58 })
59 }
60
61 fn deser_default() -> Self {
62 Self {
63 expires: Deserialize::default(),
64url: Deserialize::default(),
65
66 }
67 }
68
69 fn take_out(&mut self) -> Option<Self::Out> {
70 let (Some(expires),
71Some(url),
72) = (self.expires,
73self.url.take(),
74) else {
75 return None;
76 };
77 Some(Self::Out { expires,url })
78 }
79}
80
81impl<'a> Map for Builder<'a> {
82 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
83 self.builder.key(k)
84 }
85
86 fn finish(&mut self) -> Result<()> {
87 *self.out = self.builder.take_out();
88 Ok(())
89 }
90}
91
92impl ObjectDeser for StatementUrl {
93 type Builder = StatementUrlBuilder;
94}
95
96impl FromValueOpt for StatementUrl {
97 fn from_value(v: Value) -> Option<Self> {
98 let Value::Object(obj) = v else {
99 return None;
100 };
101 let mut b = StatementUrlBuilder::deser_default();
102 for (k, v) in obj {
103 match k.as_str() {
104 "expires" => b.expires = FromValueOpt::from_value(v),
105"url" => b.url = FromValueOpt::from_value(v),
106
107 _ => {}
108 }
109 }
110 b.take_out()
111 }
112}
113
114};
115#[cfg(feature = "serialize")]
116impl serde::Serialize for StatementUrl {
117 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
118 use serde::ser::SerializeStruct;
119 let mut s = s.serialize_struct("StatementUrl", 3)?;
120 s.serialize_field("expires", &self.expires)?;
121s.serialize_field("url", &self.url)?;
122
123 s.serialize_field("object", "statement_url")?;
124 s.end()
125 }
126}