aboutsummaryrefslogtreecommitdiff
path: root/src/util/formatting
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-10-19 14:03:17 +0200
committerMax Audron <audron@cocaine.farm>2021-10-19 14:06:32 +0200
commite731144025b726670cd85d43acdd93b7636de338 (patch)
tree570e32838f1308eaf79fdc52ec6daf4084e6e2fd /src/util/formatting
parentfix links in readme (diff)
add formatting trait for irc codes
add an impl off the formatting trait on String to format Strings with the typical irc formatting codes for bold, italic etc
Diffstat (limited to '')
-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