tinc/private/
mod.rs

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}