Skip to main content

espforge_lib/examples/
mod.rs

1pub mod builder;
2pub mod config;
3pub mod fs;
4pub mod template;
5pub mod ui;
6
7use crate::cli::interactive::{self, Prompter};
8use anyhow::Result;
9use builder::ConfigBuilder;
10use fs::OutputDirectory;
11use template::ExampleExporter;
12use ui::ResultPrinter;
13
14pub struct ExamplesArgs {
15    pub name: String,
16    pub project_name: Option<String>,
17    pub chip: Option<String>,
18}
19
20pub fn execute(args: ExamplesArgs) -> Result<()> {
21    let prompter = interactive::DialoguerPrompter::new();
22    execute_with_prompter(args, &prompter)
23}
24
25fn execute_with_prompter(args: ExamplesArgs, prompter: &dyn Prompter) -> Result<()> {
26    // 1. Resolve Configuration (Args + User Input)
27    let config = ConfigBuilder::from_args(args, prompter)?.build()?;
28
29    // 2. Prepare Output Directory (Check existence, confirm overwrite)
30    let output = OutputDirectory::prepare(&config, prompter)?;
31
32    // 3. Export the Template and Update Config
33    let exporter = ExampleExporter::new();
34    let result = exporter.export(&config, &output)?;
35
36    // 4. Display Success
37    ResultPrinter::display_success(&result);
38
39    Ok(())
40}