summaryrefslogtreecommitdiff
path: root/src/systems/render
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-02-04 00:27:16 +0800
committer魏曹先生 <1992414357@qq.com>2026-02-04 00:27:16 +0800
commitd19e5d84ee21502fd3440511d4ffb1ee1f49d3b2 (patch)
treefb8efef6f8e9a26c5b60d4ac220b11d6c6f0775e /src/systems/render
parent7ee0d3f20c875e7405bb8442c5eb0228d1599a03 (diff)
Refactor build system and implement complete renderer system
- Split monolithic build.rs into modular async generators - Add renderer override system with type-safe dispatch - Implement command template macro for consistent command definitions - Add proc-macro crates for command and renderer systems - Reorganize directory structure for better separation of concerns - Update documentation to reflect new architecture
Diffstat (limited to 'src/systems/render')
-rw-r--r--src/systems/render/render_system.rs14
-rw-r--r--src/systems/render/renderer.rs53
2 files changed, 67 insertions, 0 deletions
diff --git a/src/systems/render/render_system.rs b/src/systems/render/render_system.rs
new file mode 100644
index 0000000..7371e7a
--- /dev/null
+++ b/src/systems/render/render_system.rs
@@ -0,0 +1,14 @@
+use std::any::Any;
+
+use crate::systems::{
+ cmd::errors::CmdRenderError,
+ render::renderer::{JVRenderResult, JVResultRenderer},
+};
+
+pub async fn render(
+ data: Box<dyn Any + Send + 'static>,
+ type_name: String,
+) -> Result<JVRenderResult, CmdRenderError> {
+ let type_name_str = type_name.as_str();
+ include!("_specific_renderer_matching.rs")
+}
diff --git a/src/systems/render/renderer.rs b/src/systems/render/renderer.rs
new file mode 100644
index 0000000..9060683
--- /dev/null
+++ b/src/systems/render/renderer.rs
@@ -0,0 +1,53 @@
+use std::fmt::{Display, Formatter};
+use std::future::Future;
+
+use crate::systems::cmd::errors::CmdRenderError;
+
+pub trait JVResultRenderer<Data> {
+ fn render(
+ data: &Data,
+ ) -> impl Future<Output = Result<JVRenderResult, CmdRenderError>> + Send + Sync;
+
+ fn get_type_id(&self) -> std::any::TypeId;
+ fn get_data_type_id(&self) -> std::any::TypeId;
+}
+
+#[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)*))
+ };
+}