Skip to content

Commit cdf6bdf

Browse files
committed
feat(lib): rollback changes to parse and add a new parse_with_debug
parse now disables debug messages by default, use the other method if you want them
1 parent 37f34c9 commit cdf6bdf

File tree

8 files changed

+158
-168
lines changed

8 files changed

+158
-168
lines changed

benches/process.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use string_pipeline::Template;
55
fn criterion_benchmark(c: &mut Criterion) {
66
c.bench_function("process_simple", |b| {
77
b.iter(|| {
8-
Template::parse(black_box("{split:/:-1}"), None)
8+
Template::parse(black_box("{split:/:-1}"))
99
.unwrap()
1010
.format(black_box("/home/user/.cargo/bin"))
1111
.unwrap()
@@ -14,10 +14,9 @@ fn criterion_benchmark(c: &mut Criterion) {
1414

1515
c.bench_function("process_complex", |b| {
1616
b.iter(|| {
17-
Template::parse(
18-
black_box("{split:,:0..2|map:{trim|prepend:num\\: }|join: - |upper}"),
19-
None,
20-
)
17+
Template::parse(black_box(
18+
"{split:,:0..2|map:{trim|prepend:num\\: }|join: - |upper}",
19+
))
2120
.unwrap()
2221
.format(black_box("18, 4.92, Unknown"))
2322
.unwrap()

src/bin/bench.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ impl BenchmarkSuite {
302302
}
303303

304304
fn benchmark_template(&self, name: &str, template_str: &str) -> BenchmarkResult {
305-
let template = Template::parse(template_str, None)
305+
let template = Template::parse(template_str)
306306
.unwrap_or_else(|e| panic!("Failed to parse template '{}': {}", template_str, e));
307307

308308
// Warmup phase - run operations without timing to warm up caches and system state

src/lib.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
//! use string_pipeline::Template;
2323
//!
2424
//! // Split by comma, take first 2 items, join with " and "
25-
//! let template = Template::parse("{split:,:0..2|join: and }", None).unwrap();
25+
//! let template = Template::parse("{split:,:0..2|join: and }").unwrap();
2626
//! let result = template.format("apple,banana,cherry,date").unwrap();
2727
//! assert_eq!(result, "apple and banana");
2828
//! ```
@@ -84,7 +84,7 @@
8484
//! ```rust
8585
//! use string_pipeline::Template;
8686
//!
87-
//! let template = Template::parse("{!split:,:..}", None).unwrap();
87+
//! let template = Template::parse("{!split:,:..}").unwrap();
8888
//! // Outputs detailed debug information during processing
8989
//! let result = template.format("a,b,c").unwrap();
9090
//! assert_eq!(result, "a,b,c");
@@ -99,12 +99,12 @@
9999
//! use string_pipeline::MultiTemplate;
100100
//!
101101
//! // Combine literal text with template operations
102-
//! let template = MultiTemplate::parse("Name: {split: :0} Age: {split: :1}", None).unwrap();
102+
//! let template = MultiTemplate::parse("Name: {split: :0} Age: {split: :1}").unwrap();
103103
//! let result = template.format("John 25").unwrap();
104104
//! assert_eq!(result, "Name: John Age: 25");
105105
//!
106106
//! // Automatic caching: split operation performed only once
107-
//! let template = MultiTemplate::parse("First: {split:,:0} Second: {split:,:1}", None).unwrap();
107+
//! let template = MultiTemplate::parse("First: {split:,:0} Second: {split:,:1}").unwrap();
108108
//! let result = template.format("apple,banana").unwrap();
109109
//! assert_eq!(result, "First: apple Second: banana");
110110
//! ```
@@ -116,7 +116,7 @@
116116
//! use string_pipeline::Template;
117117
//!
118118
//! // Clean and normalize text
119-
//! let cleaner = Template::parse("{trim|replace:s/\\s+/ /g|lower}", None).unwrap();
119+
//! let cleaner = Template::parse("{trim|replace:s/\\s+/ /g|lower}").unwrap();
120120
//! let result = cleaner.format(" Hello WORLD ").unwrap();
121121
//! assert_eq!(result, "hello world");
122122
//! ```
@@ -126,7 +126,7 @@
126126
//! use string_pipeline::Template;
127127
//!
128128
//! // Extract second field from space-separated data
129-
//! let extractor = Template::parse("{split: :1}", None).unwrap();
129+
//! let extractor = Template::parse("{split: :1}").unwrap();
130130
//! let result = extractor.format("user 1234 active").unwrap();
131131
//! assert_eq!(result, "1234");
132132
//! ```
@@ -136,7 +136,7 @@
136136
//! use string_pipeline::Template;
137137
//!
138138
//! // Process each item in a list
139-
//! let processor = Template::parse("{split:,:..|map:{trim|upper}|join:\\|}", None).unwrap();
139+
//! let processor = Template::parse("{split:,:..|map:{trim|upper}|join:\\|}").unwrap();
140140
//! let result = processor.format(" apple, banana , cherry ").unwrap();
141141
//! assert_eq!(result, "APPLE|BANANA|CHERRY");
142142
//! ```
@@ -146,7 +146,7 @@
146146
//! use string_pipeline::Template;
147147
//!
148148
//! // Extract domains from URLs
149-
//! let domain_extractor = Template::parse("{split:,:..|map:{regex_extract://([^/]+):1|upper}}", None).unwrap();
149+
//! let domain_extractor = Template::parse("{split:,:..|map:{regex_extract://([^/]+):1|upper}}").unwrap();
150150
//! let result = domain_extractor.format("https://github.com,https://google.com").unwrap();
151151
//! assert_eq!(result, "GITHUB.COM,GOOGLE.COM");
152152
//! ```
@@ -156,7 +156,7 @@
156156
//! use string_pipeline::Template;
157157
//!
158158
//! // Extract timestamps from log entries
159-
//! let log_parser = Template::parse(r"{split:\n:..|map:{regex_extract:\d\d\d\d-\d\d-\d\d}|filter_not:^$|join:\n}", None).unwrap();
159+
//! let log_parser = Template::parse(r"{split:\n:..|map:{regex_extract:\d\d\d\d-\d\d-\d\d}|filter_not:^$|join:\n}").unwrap();
160160
//! let logs = "2023-12-01 ERROR: Failed\n2023-12-02 INFO: Success\nInvalid line";
161161
//! let result = log_parser.format(logs).unwrap();
162162
//! assert_eq!(result, "2023-12-01\n2023-12-02");
@@ -167,7 +167,7 @@
167167
//! use string_pipeline::Template;
168168
//!
169169
//! // Filter files by extension
170-
//! let py_filter = Template::parse("{split:,:..|filter:\\.py$|sort|join:\\n}", None).unwrap();
170+
//! let py_filter = Template::parse("{split:,:..|filter:\\.py$|sort|join:\\n}").unwrap();
171171
//! let files = "app.py,readme.md,test.py,data.json";
172172
//! let result = py_filter.format(files).unwrap();
173173
//! assert_eq!(result, "app.py\ntest.py");
@@ -191,11 +191,11 @@
191191
//! use string_pipeline::Template;
192192
//!
193193
//! // Invalid template syntax
194-
//! let result = Template::parse("{split:}", None);
194+
//! let result = Template::parse("{split:}");
195195
//! assert!(result.is_err());
196196
//!
197197
//! // Type mismatch errors are clear and helpful
198-
//! let template = Template::parse("{sort}", None).unwrap();
198+
//! let template = Template::parse("{sort}").unwrap();
199199
//! let result = template.format("not_a_list");
200200
//! assert!(result.is_err());
201201
//! // Error: "Sort operation can only be applied to lists"
@@ -215,7 +215,7 @@
215215
//! use string_pipeline::Template;
216216
//!
217217
//! // Compile once
218-
//! let template = Template::parse("{split:,:0}", None).unwrap();
218+
//! let template = Template::parse("{split:,:0}").unwrap();
219219
//!
220220
//! // Reuse many times
221221
//! for input in &["a,b,c", "x,y,z", "1,2,3"] {

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ fn main() {
227227
});
228228

229229
// Parse template and handle debug mode from both template prefix and CLI flag
230-
let template = MultiTemplate::parse(&config.template, None).unwrap_or_else(|e| {
230+
let template = MultiTemplate::parse_with_debug(&config.template, None).unwrap_or_else(|e| {
231231
eprintln!("Error parsing template: {}", e);
232232
std::process::exit(1);
233233
});

0 commit comments

Comments
 (0)