aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util/formatting/color.rs41
-rw-r--r--src/util/formatting/mod.rs88
-rw-r--r--src/util/formatting/truncate.rs (renamed from src/util/formatting.rs)0
3 files changed, 129 insertions, 0 deletions
diff --git a/src/util/formatting/color.rs b/src/util/formatting/color.rs
new file mode 100644
index 0000000..6907805
--- /dev/null
+++ b/src/util/formatting/color.rs
@@ -0,0 +1,41 @@
+pub enum Color {
+ White = 00,
+ Black = 01,
+ Blue = 02,
+ Green = 03,
+ Red = 04,
+ Brown = 05,
+ Magenta = 06,
+ Orange = 07,
+ Yellow = 08,
+ LightGreen = 09,
+ Cyan = 10,
+ LightCyan = 11,
+ LightBlue = 12,
+ Pink = 13,
+ Grey = 14,
+ LightGrey = 15,
+}
+
+impl std::fmt::Display for Color {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match self {
+ Color::White => f.write_str("\x00"),
+ Color::Black => f.write_str("\x01"),
+ Color::Blue => f.write_str("\x02"),
+ Color::Green => f.write_str("\x03"),
+ Color::Red => f.write_str("\x04"),
+ Color::Brown => f.write_str("\x05"),
+ Color::Magenta => f.write_str("\x06"),
+ Color::Orange => f.write_str("\x07"),
+ Color::Yellow => f.write_str("\x08"),
+ Color::LightGreen => f.write_str("\x09"),
+ Color::Cyan => f.write_str("\x10"),
+ Color::LightCyan => f.write_str("\x11"),
+ Color::LightBlue => f.write_str("\x12"),
+ Color::Pink => f.write_str("\x13"),
+ Color::Grey => f.write_str("\x14"),
+ Color::LightGrey => f.write_str("\x15"),
+ }
+ }
+}
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()
+ });
+ }
+}
diff --git a/src/util/formatting.rs b/src/util/formatting/truncate.rs
index c1b6257..c1b6257 100644
--- a/src/util/formatting.rs
+++ b/src/util/formatting/truncate.rs