From 54f5e9fd883e207931baa9c87b6181ca724d6bab Mon Sep 17 00:00:00 2001
From: Ben Bridle <bridle.benjamin@gmail.com>
Date: Thu, 25 Aug 2022 21:09:25 +1200
Subject: Initial commit

---
 src/table.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 src/table.rs

(limited to 'src/table.rs')

diff --git a/src/table.rs b/src/table.rs
new file mode 100644
index 0000000..cc01ffc
--- /dev/null
+++ b/src/table.rs
@@ -0,0 +1,60 @@
+use crate::Line;
+
+pub struct Table {
+    pub columns: Vec<Column>,
+    pub rows: Vec<Vec<Line>>,
+}
+
+pub struct Column {
+    pub name: Line,
+    pub alignment: Alignment,
+}
+
+pub enum Alignment {
+    Left,
+    Center,
+    Right,
+}
+impl Alignment {
+    pub fn from_str(s: &str) -> Result<Self, ()> {
+        let mut start = false;
+        let mut end = false;
+        for (i, c) in s.chars().enumerate() {
+            if c == ':' {
+                if i == 0 {
+                    start = true;
+                } else if i == s.len() - 1 {
+                    end = true;
+                } else {
+                    return Err(());
+                }
+            } else if c != '-' {
+                return Err(());
+            }
+        }
+        Ok(match (start, end) {
+            (false, false) => Self::Left,
+            (true, false) => Self::Left,
+            (false, true) => Self::Right,
+            (true, true) => Self::Center,
+        })
+    }
+}
+impl std::fmt::Display for Alignment {
+    fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
+        f.write_str(match self {
+            Self::Left => "left",
+            Self::Center => "center",
+            Self::Right => "right",
+        })
+    }
+}
+impl std::fmt::Debug for Alignment {
+    fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
+        f.write_str(match self {
+            Self::Left => "Left",
+            Self::Center => "Center",
+            Self::Right => "Right",
+        })
+    }
+}
-- 
cgit v1.2.3-70-g09d2