1use std::collections::{BTreeMap, BTreeSet};
2
3use super::types::{EscapedSlice, EscapedStr};
4
5pub trait ToEscaped {
6 type Escaped<'e>;
7}
8
9impl ToEscaped for String {
10 type Escaped<'e> = String;
11}
12
13impl<T: ToEscaped> ToEscaped for Vec<T> {
14 type Escaped<'e> = Vec<T::Escaped<'e>>;
15}
16
17impl<K: ToEscaped, V: ToEscaped> ToEscaped for BTreeMap<K, V> {
18 type Escaped<'e> = BTreeMap<K::Escaped<'e>, V::Escaped<'e>>;
19}
20
21impl<T: ToEscaped> ToEscaped for BTreeSet<T> {
22 type Escaped<'e> = BTreeSet<T::Escaped<'e>>;
23}
24
25impl ToEscaped for &str {
26 type Escaped<'e> = &'e EscapedStr;
27}
28
29impl ToEscaped for &[u8] {
30 type Escaped<'e> = &'e EscapedSlice;
31}
32
33macro_rules! impl_trivial {
34 ($($t:ident),*$(,)?) => {
35
36 $(impl ToEscaped for $t {
37 type Escaped<'e> = $t;
38 })*
39
40 };
41}
42
43impl_trivial! {
44 u8, i8,
45 u16, i16,
46 u32, i32,
47 u64, i64,
48 f32, f64,
49}