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
59#[macro_export]
60#[doc(hidden)]
61macro_rules! __tinc_field_from_str {
62 (
63 $s:expr,
64 $($literal:literal => $expr:expr),*
65 $(,flattened: [$($ident:ident),*$(,)?])?
66 $(,)?
67 ) => {
68 match $s {
69 $($literal => Ok($expr),)*
70 _ => {
71 $($(
72 if let Ok(result) = ::core::str::FromStr::from_str($s) {
73 return Ok(Self::$ident(result));
74 }
75 )*)?
76
77 Err(())
78 },
79 }
80 };
81}
82
83#[inline(always)]
84pub fn tracker_allow_duplicates<T: Tracker>(tracker: Option<&T>) -> bool {
85 tracker.is_none_or(|tracker| tracker.allow_duplicates())
86}
87
88#[inline(always)]
89pub fn serde_ser_skip_default<T: Default + PartialEq>(value: &T) -> bool {
90 value == &T::default()
91}
92
93pub fn deserialize_tracker_target<'de, D, T>(
94 state: &mut TrackerSharedState,
95 de: D,
96 tracker: &mut T,
97 target: &mut T::Target,
98) -> Result<(), D::Error>
99where
100 D: serde::Deserializer<'de>,
101 T: TrackerDeserializer<'de>,
102{
103 tinc_cel::CelMode::Serde.set();
104 state.in_scope(|| {
105 <T as TrackerDeserializer>::deserialize(
106 tracker,
107 target,
108 SerdeDeserializer {
109 deserializer: wrapper::DeserializerWrapper::new(de),
110 },
111 )
112 })
113}