1pub mod const_macros;
2pub mod wrapper;
3
4pub use tinc_derive::Tracker;
5
6mod oneof;
7pub use oneof::*;
8
9mod error;
10pub use error::*;
11
12mod tracker;
13pub use tracker::*;
14
15mod identifier;
16pub use identifier::*;
17
18mod primitive;
19pub use primitive::*;
20
21mod map;
22pub use map::*;
23
24mod optional;
25pub use optional::*;
26
27mod enum_;
28pub use enum_::*;
29
30mod struct_;
31pub use struct_::*;
32
33mod repeated;
34pub use repeated::*;
35
36mod expected;
37pub use expected::*;
38
39#[cfg(feature = "prost")]
40mod well_known;
41#[cfg(feature = "prost")]
42pub use well_known::*;
43
44mod deserializer;
45pub use deserializer::*;
46
47mod http;
48pub use http::*;
49pub use tinc_cel as cel;
50mod validation;
51pub use validation::*;
52
53mod fmt;
54pub use fmt::*;
55
56mod bytes;
57pub use bytes::*;
58
59mod float_with_non_finite;
60pub use float_with_non_finite::*;
61
62#[macro_export]
63#[doc(hidden)]
64macro_rules! __tinc_field_from_str {
65 (
66 $s:expr,
67 $($literal:literal => $expr:expr),*
68 $(,flattened: [$($ident:ident),*$(,)?])?
69 $(,)?
70 ) => {
71 match $s {
72 $($literal => Ok($expr),)*
73 _ => {
74 $($(
75 if let Ok(result) = ::core::str::FromStr::from_str($s) {
76 return Ok(Self::$ident(result));
77 }
78 )*)?
79
80 Err(())
81 },
82 }
83 };
84}
85
86#[inline(always)]
87pub fn tracker_allow_duplicates<T: Tracker>(tracker: Option<&T>) -> bool {
88 tracker.is_none_or(|tracker| tracker.allow_duplicates())
89}
90
91#[inline(always)]
92pub fn serde_ser_skip_default<T: Default + PartialEq>(value: &T) -> bool {
93 value == &T::default()
94}
95
96pub fn deserialize_tracker_target<'de, D, T>(
97 state: &mut TrackerSharedState,
98 de: D,
99 tracker: &mut T,
100 target: &mut T::Target,
101) -> Result<(), D::Error>
102where
103 D: serde::Deserializer<'de>,
104 T: TrackerDeserializer<'de>,
105{
106 tinc_cel::CelMode::Serde.set();
107 state.in_scope(|| {
108 <T as TrackerDeserializer>::deserialize(
109 tracker,
110 target,
111 SerdeDeserializer {
112 deserializer: wrapper::DeserializerWrapper::new(de),
113 },
114 )
115 })
116}