|
22 | 22 | //! use string_pipeline::Template; |
23 | 23 | //! |
24 | 24 | //! // 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(); |
26 | 26 | //! let result = template.format("apple,banana,cherry,date").unwrap(); |
27 | 27 | //! assert_eq!(result, "apple and banana"); |
28 | 28 | //! ``` |
|
84 | 84 | //! ```rust |
85 | 85 | //! use string_pipeline::Template; |
86 | 86 | //! |
87 | | -//! let template = Template::parse("{!split:,:..}", None).unwrap(); |
| 87 | +//! let template = Template::parse("{!split:,:..}").unwrap(); |
88 | 88 | //! // Outputs detailed debug information during processing |
89 | 89 | //! let result = template.format("a,b,c").unwrap(); |
90 | 90 | //! assert_eq!(result, "a,b,c"); |
|
99 | 99 | //! use string_pipeline::MultiTemplate; |
100 | 100 | //! |
101 | 101 | //! // 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(); |
103 | 103 | //! let result = template.format("John 25").unwrap(); |
104 | 104 | //! assert_eq!(result, "Name: John Age: 25"); |
105 | 105 | //! |
106 | 106 | //! // 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(); |
108 | 108 | //! let result = template.format("apple,banana").unwrap(); |
109 | 109 | //! assert_eq!(result, "First: apple Second: banana"); |
110 | 110 | //! ``` |
|
116 | 116 | //! use string_pipeline::Template; |
117 | 117 | //! |
118 | 118 | //! // 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(); |
120 | 120 | //! let result = cleaner.format(" Hello WORLD ").unwrap(); |
121 | 121 | //! assert_eq!(result, "hello world"); |
122 | 122 | //! ``` |
|
126 | 126 | //! use string_pipeline::Template; |
127 | 127 | //! |
128 | 128 | //! // Extract second field from space-separated data |
129 | | -//! let extractor = Template::parse("{split: :1}", None).unwrap(); |
| 129 | +//! let extractor = Template::parse("{split: :1}").unwrap(); |
130 | 130 | //! let result = extractor.format("user 1234 active").unwrap(); |
131 | 131 | //! assert_eq!(result, "1234"); |
132 | 132 | //! ``` |
|
136 | 136 | //! use string_pipeline::Template; |
137 | 137 | //! |
138 | 138 | //! // 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(); |
140 | 140 | //! let result = processor.format(" apple, banana , cherry ").unwrap(); |
141 | 141 | //! assert_eq!(result, "APPLE|BANANA|CHERRY"); |
142 | 142 | //! ``` |
|
146 | 146 | //! use string_pipeline::Template; |
147 | 147 | //! |
148 | 148 | //! // 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(); |
150 | 150 | //! let result = domain_extractor.format("https://github.com,https://google.com").unwrap(); |
151 | 151 | //! assert_eq!(result, "GITHUB.COM,GOOGLE.COM"); |
152 | 152 | //! ``` |
|
156 | 156 | //! use string_pipeline::Template; |
157 | 157 | //! |
158 | 158 | //! // 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(); |
160 | 160 | //! let logs = "2023-12-01 ERROR: Failed\n2023-12-02 INFO: Success\nInvalid line"; |
161 | 161 | //! let result = log_parser.format(logs).unwrap(); |
162 | 162 | //! assert_eq!(result, "2023-12-01\n2023-12-02"); |
|
167 | 167 | //! use string_pipeline::Template; |
168 | 168 | //! |
169 | 169 | //! // 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(); |
171 | 171 | //! let files = "app.py,readme.md,test.py,data.json"; |
172 | 172 | //! let result = py_filter.format(files).unwrap(); |
173 | 173 | //! assert_eq!(result, "app.py\ntest.py"); |
|
191 | 191 | //! use string_pipeline::Template; |
192 | 192 | //! |
193 | 193 | //! // Invalid template syntax |
194 | | -//! let result = Template::parse("{split:}", None); |
| 194 | +//! let result = Template::parse("{split:}"); |
195 | 195 | //! assert!(result.is_err()); |
196 | 196 | //! |
197 | 197 | //! // Type mismatch errors are clear and helpful |
198 | | -//! let template = Template::parse("{sort}", None).unwrap(); |
| 198 | +//! let template = Template::parse("{sort}").unwrap(); |
199 | 199 | //! let result = template.format("not_a_list"); |
200 | 200 | //! assert!(result.is_err()); |
201 | 201 | //! // Error: "Sort operation can only be applied to lists" |
|
215 | 215 | //! use string_pipeline::Template; |
216 | 216 | //! |
217 | 217 | //! // Compile once |
218 | | -//! let template = Template::parse("{split:,:0}", None).unwrap(); |
| 218 | +//! let template = Template::parse("{split:,:0}").unwrap(); |
219 | 219 | //! |
220 | 220 | //! // Reuse many times |
221 | 221 | //! for input in &["a,b,c", "x,y,z", "1,2,3"] { |
|
0 commit comments