vibrance/traits/
impls.rs

1use std::ops::{
2    Add,
3    AddAssign
4};
5
6use crate::{
7    traits::Colourisable,
8    consts::Formatting,
9    strings::{
10        ColouredString,
11        ColouredStringPart
12    }
13};
14
15
16impl Colourisable for &str {
17    fn formatted(self, formatting : Vec<Formatting>) -> ColouredString {
18        return ColouredString::from_formatting(self, formatting);
19    }
20}
21impl Add<ColouredString> for &str {
22    type Output = ColouredString;
23    fn add(self, other : ColouredString) -> Self::Output {
24        let mut string = ColouredString::new();
25        string.parts   = vec![
26            ColouredStringPart::String(self.to_string()),
27            ColouredStringPart::Sub(Box::new(other.formatted(Vec::new())))
28        ];
29        return string;
30    }
31}
32impl From<&str> for ColouredString {
33    fn from(string : &str) -> Self {
34        return string.formatted(Vec::new());
35    }
36}
37
38impl Colourisable for String {
39    fn formatted(self, formatting : Vec<Formatting>) -> ColouredString {
40        return ColouredString::from_formatting(self, formatting);
41    }
42}
43impl Add<ColouredString> for String {
44    type Output = ColouredString;
45    fn add(self, other : ColouredString) -> Self::Output {
46        let mut string = ColouredString::new();
47        string.parts   = vec![
48            ColouredStringPart::String(self),
49            ColouredStringPart::Sub(Box::new(other.formatted(Vec::new())))
50        ];
51        return string;
52    }
53}
54impl Into<String> for ColouredString {
55    fn into(self) -> String {
56        return self.unformat();
57    }
58}
59impl From<String> for ColouredString {
60    fn from(string : String) -> Self {
61        return string.formatted(Vec::new());
62    }
63}
64
65impl Colourisable for char {
66    fn formatted(self, formatting : Vec<Formatting>) -> ColouredString {
67        return ColouredString::from_formatting(self, formatting);
68    }
69}
70impl Add<ColouredString> for char {
71    type Output = ColouredString;
72    fn add(self, other : ColouredString) -> Self::Output {
73        let mut string = ColouredString::new();
74        string.parts   = vec![
75            ColouredStringPart::String(self.to_string()),
76            ColouredStringPart::Sub(Box::new(other.formatted(Vec::new())))
77        ];
78        return string;
79    }
80}
81impl From<char> for ColouredString {
82    fn from(ch : char) -> Self {
83        return ch.formatted(Vec::new());
84    }
85}
86
87impl Colourisable for ColouredString {
88    fn formatted(mut self, mut formatting : Vec<Formatting>) -> ColouredString {
89        formatting.append(&mut self.formatting);
90        self.formatting = formatting;
91        return self;
92    }
93}
94impl<S : Colourisable> Add<S> for ColouredString {
95    type Output = ColouredString;
96    fn add(self, other : S) -> Self::Output {
97        let mut string = ColouredString::new();
98        string.parts   = vec![
99            ColouredStringPart::Sub(Box::new(self)),
100            ColouredStringPart::Sub(Box::new(other.formatted(Vec::new())))
101        ];
102        return string;
103    }
104}
105impl<S : Colourisable> AddAssign<S> for ColouredString {
106    fn add_assign(&mut self, other : S) {
107        self.parts.push(
108            ColouredStringPart::Sub(Box::new(other.formatted(Vec::new())))
109        );
110    }
111}