diff options
Diffstat (limited to 'src/util/formatting/mod.rs')
| -rw-r--r-- | src/util/formatting/mod.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/util/formatting/mod.rs b/src/util/formatting/mod.rs new file mode 100644 index 0000000..5cfdfa8 --- /dev/null +++ b/src/util/formatting/mod.rs @@ -0,0 +1,88 @@ +mod truncate; +mod color; + +pub use truncate::*; +pub use color::*; + +pub trait Formatting<'r> { + const BOLD: &'r str = "\x02"; + const ITALIC: &'r str = "\x1D"; + const UNDERLINE: &'r str = "\x1F"; + const STRIKETHROUGH: &'r str = "\x1E"; + const MONOSPACE: &'r str = "\x11"; + const COLOR: &'r str = "\x03"; + + fn bold(self) -> Self; + fn italic(self) -> Self; + fn underline(self) -> Self; + fn strikethrough(self) -> Self; + fn monospace(self) -> Self; + // fn color(self, color: Color) -> Self; +} + +impl<'r> Formatting<'r> for String { + fn bold(mut self) -> Self { + self.insert_str(0, Self::BOLD); + self.push_str(Self::BOLD); + + return self; + } + + fn italic(mut self) -> Self { + self.insert_str(0, Self::ITALIC); + self.push_str(Self::ITALIC); + + return self; + } + + fn underline(mut self) -> Self { + self.insert_str(0, Self::UNDERLINE); + self.push_str(Self::UNDERLINE); + + return self; + } + + fn strikethrough(mut self) -> Self { + self.insert_str(0, Self::STRIKETHROUGH); + self.push_str(Self::STRIKETHROUGH); + + return self; + } + + fn monospace(mut self) -> Self { + self.insert_str(0, Self::MONOSPACE); + self.push_str(Self::MONOSPACE); + + return self; + } + + // TODO implement color codes + // fn color(mut self, foreground: Option<Color>, background: Option<Color>) -> Self { + // self.insert_str(0, Self::COLOR); + // self.push_str(Self::COLOR); + + // return self; + // } +} + +#[cfg(all(test, feature = "bench"))] +mod bench { + use super::*; + use test::Bencher; + + #[bench] + fn bench_mut(b: &mut Bencher) { + b.iter(|| { + let mut src = "test".to_string(); + src.bold() + }); + } + + #[bench] + fn bench_format(b: &mut Bencher) { + b.iter(|| { + let mut src = "test".to_string(); + src.italic() + }); + } +} |
