app_macro_usage/
app_macro_usage.rs1use pipeline_script::app;
6use pipeline_script::plugin::builtin::BuiltinPlugin;
7use pipeline_script::plugin::format_string::FormatStringPlugin;
8use pipeline_script::plugin::map::MapPlugin;
9use pipeline_script::plugin::math::MathPlugin;
10
11fn basic_usage_example() {
13 println!("=== 基本使用示例 ===");
14
15 let mut my_app = app!("main.ppl", [BuiltinPlugin, MathPlugin]);
17
18 println!("应用程序创建成功:入口文件 'main.ppl',插件:BuiltinPlugin, MathPlugin");
22}
23
24fn chaining_example() {
26 println!("\n=== 链式调用示例 ===");
27
28 let _configured_app = app!(
30 "complex.ppl",
31 [BuiltinPlugin, FormatStringPlugin, MathPlugin, MapPlugin]
32 )
33 .set_test_llvm(true)
34 .add_test_llvm_file("test.ll");
35
36 println!("配置完成的应用程序:");
39 println!(" - 入口文件: 'complex.ppl'");
40 println!(" - 插件: BuiltinPlugin, FormatStringPlugin, MathPlugin, MapPlugin");
41 println!(" - LLVM测试: 已启用");
42 println!(" - 测试文件: 'test.ll'");
43}
44
45fn empty_plugins_example() {
47 println!("\n=== 空插件列表示例 ===");
48
49 let _minimal_app = app!("minimal.ppl", []);
51
52 println!("最小应用程序创建成功:入口文件 'minimal.ppl',无插件");
53}
54
55fn variable_parameters_example() {
57 println!("\n=== 变量参数示例 ===");
58
59 let entry_file = "dynamic.ppl";
60 let _dynamic_app = app!(entry_file, [BuiltinPlugin]);
61
62 println!("动态参数应用程序创建成功:入口文件 '{}'", entry_file);
63}
64
65fn trailing_comma_example() {
67 println!("\n=== 插件列表末尾逗号示例 ===");
68
69 let _app_with_comma = app!(
71 "trailing.ppl",
72 [
73 BuiltinPlugin,
74 MathPlugin,
75 FormatStringPlugin, ]
77 );
78
79 println!("带末尾逗号的应用程序创建成功");
80}
81
82fn comparison_example() {
84 println!("\n=== 传统方式 vs app! 宏对比 ===");
85
86 println!("传统方式(较冗长):");
87 println!("App::new()");
88 println!(" .set_entry_file(\"main.ppl\")");
89 println!(" .add_plugin(BuiltinPlugin)");
90 println!(" .add_plugin(MathPlugin)");
91 println!(" .add_plugin(FormatStringPlugin)");
92 println!(" .run();");
93
94 println!("\n使用 app! 宏(简洁):");
95 println!("app!(\"main.ppl\", [BuiltinPlugin, MathPlugin, FormatStringPlugin])");
96 println!(" .run();");
97
98 use pipeline_script::core::app::App;
100
101 let _traditional_app = App::new()
103 .set_entry_file("compare.ppl")
104 .add_plugin(BuiltinPlugin)
105 .add_plugin(MathPlugin);
106
107 let _macro_app = app!("compare.ppl", [BuiltinPlugin, MathPlugin]);
109
110 println!("\n两种方式创建的应用程序功能完全相同!");
111}
112
113fn main() {
114 println!("Pipeline Script app! 宏使用示例");
115 println!("==================================");
116
117 basic_usage_example();
118 chaining_example();
119 empty_plugins_example();
120 variable_parameters_example();
121 trailing_comma_example();
122 comparison_example();
123
124 println!("\n所有示例执行完成!");
125}
126
127#[cfg(test)]
128mod tests {
129 use super::*;
130
131 #[test]
133 fn test_all_examples() {
134 basic_usage_example();
136 chaining_example();
137 empty_plugins_example();
138 variable_parameters_example();
139 trailing_comma_example();
140 comparison_example();
141 }
142
143 #[test]
145 fn test_macro_return_type() {
146 use pipeline_script::core::app::App;
147
148 let app: App = app!("test.ppl", [BuiltinPlugin]);
149 drop(app);
151 }
152}