specta_typescript/
types.rs1use std::fmt::Debug;
2
3use specta::{
4 Type, Types,
5 datatype::{DataType, Reference},
6};
7
8use crate::opaque;
9
10pub struct Any<T = ()>(T);
47
48impl<T> Type for Any<T> {
49 fn definition(_: &mut Types) -> DataType {
50 DataType::Reference(Reference::opaque(opaque::Any))
51 }
52}
53
54impl<T: Debug> Debug for Any<T> {
55 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
56 f.debug_tuple("Any").field(&self.0).finish()
57 }
58}
59
60impl<T: Clone> Clone for Any<T> {
61 fn clone(&self) -> Self {
62 Self(self.0.clone())
63 }
64}
65
66impl<T: Default> Default for Any<T> {
67 fn default() -> Self {
68 Self(T::default())
69 }
70}
71
72#[cfg(feature = "serde")]
73#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
74impl<T: serde::Serialize> serde::Serialize for Any<T> {
75 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
76 where
77 S: serde::Serializer,
78 {
79 T::serialize(&self.0, serializer)
80 }
81}
82
83#[cfg(feature = "serde")]
84#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
85impl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Any<T> {
86 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
87 where
88 D: serde::Deserializer<'de>,
89 {
90 T::deserialize(deserializer).map(Self)
91 }
92}
93
94pub struct Unknown<T = ()>(T);
125
126impl<T> Type for Unknown<T> {
127 fn definition(_: &mut Types) -> DataType {
128 DataType::Reference(Reference::opaque(opaque::Unknown))
129 }
130}
131
132impl<T: Debug> Debug for Unknown<T> {
133 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
134 f.debug_tuple("Any").field(&self.0).finish()
135 }
136}
137
138impl<T: Clone> Clone for Unknown<T> {
139 fn clone(&self) -> Self {
140 Self(self.0.clone())
141 }
142}
143
144impl<T: Default> Default for Unknown<T> {
145 fn default() -> Self {
146 Self(T::default())
147 }
148}
149
150#[cfg(feature = "serde")]
151#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
152impl<T: serde::Serialize> serde::Serialize for Unknown<T> {
153 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
154 where
155 S: serde::Serializer,
156 {
157 T::serialize(&self.0, serializer)
158 }
159}
160
161#[cfg(feature = "serde")]
162#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
163impl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Unknown<T> {
164 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
165 where
166 D: serde::Deserializer<'de>,
167 {
168 T::deserialize(deserializer).map(Self)
169 }
170}
171
172pub struct Never<T = ()>(T);
203
204impl<T> Type for Never<T> {
205 fn definition(_: &mut Types) -> DataType {
206 DataType::Reference(Reference::opaque(opaque::Never))
207 }
208}
209
210impl<T: Debug> Debug for Never<T> {
211 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
212 f.debug_tuple("Any").field(&self.0).finish()
213 }
214}
215
216impl<T: Clone> Clone for Never<T> {
217 fn clone(&self) -> Self {
218 Self(self.0.clone())
219 }
220}
221
222impl<T: Default> Default for Never<T> {
223 fn default() -> Self {
224 Self(T::default())
225 }
226}
227
228#[cfg(feature = "serde")]
229#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
230impl<T: serde::Serialize> serde::Serialize for Never<T> {
231 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
232 where
233 S: serde::Serializer,
234 {
235 T::serialize(&self.0, serializer)
236 }
237}
238
239#[cfg(feature = "serde")]
240#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
241impl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Never<T> {
242 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
243 where
244 D: serde::Deserializer<'de>,
245 {
246 T::deserialize(deserializer).map(Self)
247 }
248}
249
250pub struct Number<T = ()>(T);
284
285impl<T> Type for Number<T> {
286 fn definition(_: &mut Types) -> DataType {
287 DataType::Reference(Reference::opaque(opaque::Number))
288 }
289}
290
291impl<T: Debug> Debug for Number<T> {
292 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
293 f.debug_tuple("Number").field(&self.0).finish()
294 }
295}
296
297impl<T: Clone> Clone for Number<T> {
298 fn clone(&self) -> Self {
299 Self(self.0.clone())
300 }
301}
302
303impl<T: Default> Default for Number<T> {
304 fn default() -> Self {
305 Self(T::default())
306 }
307}
308
309#[cfg(feature = "serde")]
310#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
311impl<T: serde::Serialize> serde::Serialize for Number<T> {
312 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
313 where
314 S: serde::Serializer,
315 {
316 T::serialize(&self.0, serializer)
317 }
318}
319
320#[cfg(feature = "serde")]
321#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
322impl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Number<T> {
323 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
324 where
325 D: serde::Deserializer<'de>,
326 {
327 T::deserialize(deserializer).map(Self)
328 }
329}
330
331pub struct BigInt<T = ()>(T);
365
366impl<T> Type for BigInt<T> {
367 fn definition(_: &mut Types) -> DataType {
368 DataType::Reference(Reference::opaque(opaque::BigInt))
369 }
370}
371
372impl<T: Debug> Debug for BigInt<T> {
373 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
374 f.debug_tuple("BigInt").field(&self.0).finish()
375 }
376}
377
378impl<T: Clone> Clone for BigInt<T> {
379 fn clone(&self) -> Self {
380 Self(self.0.clone())
381 }
382}
383
384impl<T: Default> Default for BigInt<T> {
385 fn default() -> Self {
386 Self(T::default())
387 }
388}
389
390#[cfg(feature = "serde")]
391#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
392impl<T: serde::Serialize> serde::Serialize for BigInt<T> {
393 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
394 where
395 S: serde::Serializer,
396 {
397 T::serialize(&self.0, serializer)
398 }
399}
400
401#[cfg(feature = "serde")]
402#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
403impl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for BigInt<T> {
404 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
405 where
406 D: serde::Deserializer<'de>,
407 {
408 T::deserialize(deserializer).map(Self)
409 }
410}