MCPcopy Create free account
hub / github.com/Notgnoshi/generative / build_rune_script

Function build_rune_script

tools/attractor.rs:169–214  ·  view source on GitHub ↗
(args: &CmdlineOptions)

Source from the content-addressed store, hash-verified

167}
168
169fn build_rune_script(args: &CmdlineOptions) -> eyre::Result<rune::Source> {
170 let mut lines = Vec::new();
171 lines.push("pub fn iterate(x, y) {".into());
172 lines.push("// parameters".into());
173 // Add the alphabetic parameters first
174 if let Some(letters) = &args.letters {
175 let mut params = params_from_letters(letters)?;
176 lines.append(&mut params);
177 }
178
179 // Add the explicit parameters second (allows overrides if you so wanted)
180 for parameter in &args.parameter {
181 lines.push(format!("let {parameter};"));
182 }
183
184 // Add the script if given
185 if let Some(script) = &args.script {
186 lines.push("// script".into());
187 if script == "-" {
188 for maybe_line in std::io::stdin().lock().lines() {
189 let line = maybe_line?;
190 lines.push(line);
191 }
192 } else {
193 let file = std::fs::File::open(script)?;
194 let reader = std::io::BufReader::new(file);
195 for maybe_line in reader.lines() {
196 let line = maybe_line?;
197 lines.push(line);
198 }
199 }
200 }
201
202 // Finally append any --math expressions
203 if !args.math.is_empty() {
204 lines.push("// math".into());
205 }
206 lines.append(&mut args.math.clone());
207
208 lines.push("return (x_new, y_new);".into());
209 lines.push("}".into());
210 let script = lines.join("\n");
211 tracing::debug!("Generated rune script:\n==========\n{script}\n==========");
212 let source = rune::Source::memory(script)?;
213 Ok(source)
214}
215
216fn main() -> eyre::Result<()> {
217 color_eyre::install()?;

Calls 2

params_from_lettersFunction · 0.85
linesMethod · 0.80

Tested by

no test coverage detected