validation_usage/
validation_usage.rs1use tron::{TronTemplate, TronRef, Result};
7use tron::validation::{TemplateValidator, ValidationConfig, Severity, IssueCategory};
8
9fn main() -> Result<()> {
10 println!("=== Tron Template Validation Example ===\n");
11
12 example_basic_validation()?;
14
15 example_validation_with_issues()?;
17
18 example_custom_validation()?;
20
21 example_security_validation()?;
23
24 example_multiple_template_validation()?;
26
27 Ok(())
28}
29
30fn example_basic_validation() -> Result<()> {
31 println!("1. Basic Template Validation (Good Template):");
32
33 let template = TronTemplate::new(
34 "fn @[function_name]@(@[parameters]@) -> @[return_type]@ {\n @[function_body]@\n}"
35 )?;
36
37 let validator = TemplateValidator::new();
38 let report = validator.validate(&template)?;
39
40 println!(" Template: fn @[function_name]@(@[parameters]@) -> @[return_type]@ {{ @[function_body]@ }}");
41 println!(" {}", report);
42
43 Ok(())
44}
45
46fn example_validation_with_issues() -> Result<()> {
47 println!("2. Validation with Issues:");
48
49 let template = TronTemplate::new(
51 "fn @[n]@() { @[x]@; } \nlet @[a]@ = @[b]@; "
52 )?;
53
54 let validator = TemplateValidator::new();
55 let report = validator.validate(&template)?;
56
57 println!(" Template with issues:");
58 println!(" {}", report);
59
60 let errors = report.issues_by_severity(Severity::Error);
62 let warnings = report.issues_by_severity(Severity::Warning);
63 let info = report.issues_by_severity(Severity::Info);
64
65 println!(" Breakdown: {} errors, {} warnings, {} info",
66 errors.len(), warnings.len(), info.len());
67
68 Ok(())
69}
70
71fn example_custom_validation() -> Result<()> {
72 println!("3. Custom Validation Configuration:");
73
74 let mut config = ValidationConfig::default();
76 config.min_placeholder_length = 5; config.check_placeholder_naming = true;
78 config.check_security = false; config.check_performance = true;
80
81 let template = TronTemplate::new("Hello @[name]@! Your @[age]@ is recorded.")?;
82
83 let validator = TemplateValidator::with_config(config);
84 let report = validator.validate(&template)?;
85
86 println!(" Custom config (min_placeholder_length = 5):");
87 println!(" Template: Hello @[name]@! Your @[age]@ is recorded.");
88 println!(" {}", report);
89
90 Ok(())
91}
92
93fn example_security_validation() -> Result<()> {
94 println!("4. Security Validation:");
95
96 let template = TronTemplate::new(
98 r#"
99function processData() {
100 eval(@[user_code]@);
101 var password = "@[user_password]@";
102 return "<script>alert('XSS');</script>";
103}
104"#
105 )?;
106
107 let validator = TemplateValidator::new();
108 let report = validator.validate(&template)?;
109
110 println!(" Template with security concerns:");
111 println!(" {}", report);
112
113 let security_issues = report.issues_by_category(&IssueCategory::Security);
115 if !security_issues.is_empty() {
116 println!(" Security-specific issues:");
117 for (i, issue) in security_issues.iter().enumerate() {
118 println!(" {}. {}", i + 1, issue.message());
119 if let Some(suggestion) = issue.suggestion() {
120 println!(" Suggestion: {}", suggestion);
121 }
122 }
123 }
124
125 Ok(())
126}
127
128fn example_multiple_template_validation() -> Result<()> {
129 println!("5. Multiple Template Validation:");
130
131 let templates = vec![
132 TronTemplate::new("fn @[function_name]@(@[params]@) -> @[return_type]@ { @[body]@ }")?,
133 TronTemplate::new("struct @[n]@ { @[f]@ }")?, TronTemplate::new("Hello @[user_name]@! Welcome to @[application_name]@.")?, TronTemplate::new("const @[C]@ = @[value]@;")?, ];
137
138 let validator = TemplateValidator::new();
139
140 for (index, template) in templates.iter().enumerate() {
142 let report = validator.validate(template)?;
143
144 println!(" Template #{}: {} issue(s)",
145 index + 1,
146 report.issues().len()
147 );
148
149 if report.has_issues() {
150 for issue in report.issues().iter().take(2) {
152 println!(" - [{}] {}: {}",
153 issue.severity(),
154 issue.category(),
155 issue.message()
156 );
157 }
158 if report.issues().len() > 2 {
159 println!(" ... and {} more", report.issues().len() - 2);
160 }
161 } else {
162 println!(" ✓ No issues found");
163 }
164 println!();
165 }
166
167 println!(" Template Reference Validation:");
169 let template = TronTemplate::new("fn main() { @[body]@ }")?;
170 let template_ref = TronRef::new(template)
171 .with_dependency("unsafe_crate = \"0.1\"");
172
173 let report = validator.validate_ref(&template_ref)?;
174 println!(" TronRef validation: {} issue(s)", report.issues().len());
175
176 Ok(())
177}