summaryrefslogtreecommitdiff
path: root/src/subcmd/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/subcmd/renderer.rs')
-rw-r--r--src/subcmd/renderer.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/subcmd/renderer.rs b/src/subcmd/renderer.rs
new file mode 100644
index 0000000..99a67f1
--- /dev/null
+++ b/src/subcmd/renderer.rs
@@ -0,0 +1,54 @@
+use std::fmt::{Display, Formatter};
+
+use serde::Serialize;
+
+use crate::subcmd::errors::CmdRenderError;
+
+pub trait JVResultRenderer<Data>
+where
+ Data: Serialize,
+{
+ fn render(
+ data: &Data,
+ ) -> impl Future<Output = Result<JVRenderResult, CmdRenderError>> + Send + Sync;
+}
+
+#[derive(Default, Debug, PartialEq)]
+pub struct JVRenderResult {
+ render_text: String,
+}
+
+impl Display for JVRenderResult {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ write!(f, "{}\n", self.render_text.trim())
+ }
+}
+
+impl JVRenderResult {
+ pub fn print(&mut self, text: &str) {
+ self.render_text.push_str(text);
+ }
+
+ pub fn println(&mut self, text: &str) {
+ self.render_text.push_str(text);
+ self.render_text.push('\n');
+ }
+
+ pub fn clear(&mut self) {
+ self.render_text.clear();
+ }
+}
+
+#[macro_export]
+macro_rules! r_print {
+ ($result:expr, $($arg:tt)*) => {
+ $result.print(&format!($($arg)*));
+ };
+}
+
+#[macro_export]
+macro_rules! r_println {
+ ($result:expr, $($arg:tt)*) => {
+ $result.println(&format!($($arg)*));
+ };
+}