summaryrefslogtreecommitdiff
path: root/src/systems/cmd/renderer.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-01-23 04:49:34 +0800
committer魏曹先生 <1992414357@qq.com>2026-01-23 04:49:34 +0800
commit626536ce51975b051fea087620bc1eb7f6bc69d3 (patch)
treeb24916b22012d9b8b3b09366bca9911781e6d596 /src/systems/cmd/renderer.rs
parentf607f6ac3b98d00370f613e674da7beb4c61ce58 (diff)
Reorganize project structure into systems and assets
Diffstat (limited to 'src/systems/cmd/renderer.rs')
-rw-r--r--src/systems/cmd/renderer.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/systems/cmd/renderer.rs b/src/systems/cmd/renderer.rs
new file mode 100644
index 0000000..bdd702d
--- /dev/null
+++ b/src/systems/cmd/renderer.rs
@@ -0,0 +1,54 @@
+use std::fmt::{Display, Formatter};
+
+use serde::Serialize;
+
+use crate::systems::cmd::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)*));
+ };
+}