1mod oauth_parameter;
2mod percent_encoding;
3
4pub use self::oauth_parameter::OAuthParameter;
5pub use self::percent_encoding::{percent_encode, DoublePercentEncode, PercentEncode};
6
7macro_rules! cfg_type_param_hack {
11 (
12 $(#[$attr:meta])*
13 $vis:vis $kw:ident $Name:ident<
14 $($a:lifetime),* $(,)?
15 $($(#[$($cfg:tt)+])? $T:ident $(: $TB:path)? $(= $D:ty)?),* $(,)?
16 > $body:tt $(; $($dummy:tt)?)?
17 ) => {
18 cfg_type_param_hack! {@inner
19 [] [$($(#[$($cfg)+])? $T $(: $TB)? $(= $D)?,)*]
20 $(#[$attr])* $vis $kw $Name<$($a),*> $body $(; $($dummy)?)?
21 }
22 };
23 (@inner
24 [$($accum:tt)*] [#[cfg($pred:meta)] $T:ident $(: $TB:path)? $(= $D:ty)?, $($rest:tt)*]
25 $($item:tt)+
26 ) => {
27 #[cfg($pred)]
28 cfg_type_param_hack! {@inner [$($accum)* $T $(: $TB)? $(= $D)?,] [$($rest)*] $($item)+ }
29 #[cfg(not($pred))]
30 cfg_type_param_hack! {@inner [$($accum)*] [$($rest)*] $($item)+ }
31 };
32 (@inner [$($accum:tt)*] [$T:ident $(: $TB:path)? $(= $D:ty)?, $($rest:tt)*] $($item:tt)+) => {
33 cfg_type_param_hack! {@inner [$($accum)* $T $(: $TB)? $(= $D)?,] [$($rest)*] $($item)+ }
34 };
35 (@inner
36 [$($accum:tt)*] []
37 $(#[$attr:meta])*
38 $vis:vis $kw:ident $Name:ident<$($a:lifetime),*> $body:tt $($semicolon:tt)?
39 ) => {
40 $(#[$attr])*
41 $vis $kw $Name<$($a,)* $($accum)*> $body $($semicolon)?
42 };
43}
44
45macro_rules! doc_auto_cfg {
50 (@inner $(#[$($accum:tt)+])* { #[cfg($pred:meta)] $($rest:tt)+ }) => {
52 doc_auto_cfg! {@inner
53 $(#[$($accum)+])*
54 #[cfg_attr(docsrs, doc(cfg($pred)))]
55 #[cfg($pred)]
56 { $($rest)+ }
57 }
58 };
59 (@inner $(#[$($accum:tt)+])* { #[$($attr:tt)+] $($rest:tt)+ }) => {
61 doc_auto_cfg! {@inner
62 $(#[$($accum)+])*
63 #[$($attr)+]
64 { $($rest)+ }
65 }
66 };
67 (@inner $(#[$($accum:tt)+])* { $item:item $($rest:tt)* }) => {
68 doc_coerce_expr! {
69 $(#[$($accum)+])*
70 $item
71 }
72 doc_auto_cfg! {@inner { $($rest)* }}
73 };
74 (@inner {}) => {};
75 ($($arg:tt)*) => {
76 doc_auto_cfg! {@inner { $($arg)* }}
77 };
78}
79
80macro_rules! doc_coerce_expr {
82 ($(#[$($accum:tt)+])* { #[doc = $doc:expr] $($rest:tt)+ }) => {
83 doc_coerce_expr! {
84 $(#[$($accum)+])*
85 #[doc = $doc]
86 { $($rest)+ }
87 }
88 };
89 ($(#[$($accum:tt)+])* { $item:item $($rest:tt)* }) => {
90 $(#[$($accum)+])*
91 $item
92 doc_coerce_expr! {{ $($rest)* }}
93 };
94 ({}) => {};
95 ($($arg:tt)*) => {
96 doc_coerce_expr! {{ $($arg)* }}
97 };
98}
99
100macro_rules! options {
101 ($(
102 $(#[$attr:meta])*
103 pub struct $O:ident<$lifetime:tt> {
104 $(#[$ctor_attr:meta])* $ctor:ident;
105 $($field:tt)*
106 }
107 )*) => {$(
108 $(#[$attr])*
109 pub struct $O<$lifetime> {
110 $($field)*
111 }
112
113 impl<$lifetime> $O<$lifetime> {
114 $(#[$ctor_attr])*
115 pub fn $ctor() -> Self {
116 Default::default()
117 }
118
119 impl_setters! { $($field)* }
120 }
121 )*};
122}
123
124macro_rules! impl_setters {
125 ($(#[$attr:meta])* $setter:ident: Option<$t:ty>, $($rest:tt)*) => {
126 $(#[$attr])*
127 pub fn $setter(&mut self, $setter: impl Into<Option<$t>>) -> &mut Self {
128 self.$setter = $setter.into();
129 self
130 }
131 impl_setters! { $($rest)* }
132 };
133 ($(#[$attr:meta])* $setter:ident: bool, $($rest:tt)*) => {
134 $(#[$attr])*
135 pub fn $setter(&mut self, $setter: bool) -> &mut Self {
136 self.$setter = $setter;
137 self
138 }
139 impl_setters! { $($rest)* }
140 };
141 ($(#[$attr:meta])* $setter:ident: $t:ty, $($rest:tt)*) => {
142 $(#[$attr])*
143 pub fn $setter(&mut self, $setter: impl Into<Option<$t>>) -> &mut Self {
144 self.$setter = $setter;
145 self
146 }
147 impl_setters! { $($rest)* }
148 };
149 () => {};
150}
151
152impl OAuthParameter {
153 pub fn serialize<S: crate::serializer::Serializer>(self, serializer: &mut S) {
154 match self {
155 OAuthParameter::Callback => serializer.serialize_oauth_callback(),
156 OAuthParameter::ConsumerKey => serializer.serialize_oauth_consumer_key(),
157 OAuthParameter::Nonce => serializer.serialize_oauth_nonce(),
158 OAuthParameter::SignatureMethod => serializer.serialize_oauth_signature_method(),
159 OAuthParameter::Timestamp => serializer.serialize_oauth_timestamp(),
160 OAuthParameter::Token => serializer.serialize_oauth_token(),
161 OAuthParameter::Verifier => serializer.serialize_oauth_verifier(),
162 OAuthParameter::Version => serializer.serialize_oauth_version(),
163 OAuthParameter::None => panic!("called `serialize` on a `OAuthParameter::None`"),
164 }
165 }
166}