storekey/
to_escaped.rs

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}