1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use std::borrow::Borrow;
// use crate::utils::Cow2::{Borrowed2, Owned2};

pub fn escape_whitespaces(data: impl Borrow<str>, escape_spaces: bool) -> String {
    let data = data.borrow();
    let mut res = String::with_capacity(data.len());
    data.chars().for_each(|ch| match ch {
        ' ' if escape_spaces => res.extend("\u{00B7}".chars()),
        '\t' => res.extend("\\t".chars()),
        '\n' => res.extend("\\n".chars()),
        '\r' => res.extend("\\r".chars()),
        _ => res.push(ch),
    });
    res
}

pub trait Sealed {}

// pub enum Cow2<'a,Ref,T:Borrow<Ref> = Ref>{
//     Borrowed2(&'a Ref),
//     Owned2(T)
// }
//
// impl<'a,Ref,T:Borrow<Ref> + > Cow2<'a,Ref,T>{
//     fn to_owned(&self) -> T
// }
//
// impl<Ref,T:Borrow<Ref>> Borrow<Ref> for Cow2<'_,Ref,T>{
//     fn borrow(&self) -> &Ref {
//         match self{
//             Cow2::Borrowed2(x) => x,
//             Cow2::Owned2(x) => x.borrow(),
//         }
//     }
// }
//
// impl<'a,Ref,T:Borrow<Ref>> From<&'a Ref> for Cow2<'a,Ref,T>{
//     fn from(f: &'a Ref) -> Self {
//         Borrowed2(f)
//     }
// }
//
// impl<'a,Ref,T:Borrow<Ref>> From<T> for Cow2<'a,Ref,T>{
//     fn from(f: T) -> Self {
//         Owned2(f)
//     }
// }