Skip to main content

systemprompt_cli/commands/web/
mod.rs

1//! The `web` command group: configuration management for the static-site layer.
2//!
3//! Routes [`WebCommands`] to the content-type, template, asset, sitemap, and
4//! validation subcommands, each operating on the on-disk web content config.
5
6pub mod assets;
7pub mod content_types;
8pub mod paths;
9pub mod sitemap;
10pub mod templates;
11pub mod types;
12mod validate;
13
14use anyhow::Result;
15use clap::Subcommand;
16
17use crate::CliConfig;
18use crate::cli_settings::get_global_config;
19use crate::shared::{CommandOutput, render_result};
20
21#[derive(Debug, Subcommand)]
22pub enum WebCommands {
23    #[command(subcommand, about = "Manage content types")]
24    ContentTypes(content_types::ContentTypesCommands),
25
26    #[command(subcommand, about = "Manage templates")]
27    Templates(templates::TemplatesCommands),
28
29    #[command(subcommand, about = "List and inspect assets")]
30    Assets(assets::AssetsCommands),
31
32    #[command(subcommand, about = "Sitemap operations")]
33    Sitemap(sitemap::SitemapCommands),
34
35    #[command(about = "Validate web configuration")]
36    Validate(validate::ValidateArgs),
37}
38
39pub fn execute(command: WebCommands) -> Result<()> {
40    let config = get_global_config();
41    execute_with_config(command, &config)
42}
43
44pub fn execute_with_config(command: WebCommands, config: &CliConfig) -> Result<()> {
45    match command {
46        WebCommands::ContentTypes(cmd) => content_types::execute(cmd, config),
47        WebCommands::Templates(cmd) => templates::execute(cmd, config),
48        WebCommands::Assets(cmd) => assets::execute(cmd, config),
49        WebCommands::Sitemap(cmd) => sitemap::execute(cmd, config),
50        WebCommands::Validate(args) => {
51            let output = validate::execute(&args, config)?;
52            let valid = output.valid;
53            let error_count = output.errors.len();
54            render_result(&CommandOutput::card_value(
55                "Web Configuration Validation",
56                &output,
57            ));
58            if !valid {
59                return Err(anyhow::anyhow!(
60                    "web configuration is invalid: {error_count} error(s), see report above",
61                ));
62            }
63            Ok(())
64        },
65    }
66}