hygg 0.1.20

Simplifying the way you read
use crate::args::Args;

pub(crate) fn handle_demo_modes(
  args: &Args,
) -> Result<bool, Box<dyn std::error::Error>> {
  if args.list_demos {
    use cli_text_reader::demo_registry::list_all_demos;
    println!("Available demos:");
    for (id, name, description) in list_all_demos() {
      println!("  {id} - {name} : {description}");
    }
    return Ok(true);
  }

  if args.list_components {
    use cli_text_reader::demo_components::list_all_components;
    println!("Available demo components:");
    for component in list_all_components() {
      println!(
        "  {} - {} : {}",
        component.id, component.name, component.description
      );
    }
    return Ok(true);
  }

  if let Some(component_list) = &args.demo_compose {
    println!(
      "Demo composition from command line is not yet fully implemented."
    );
    println!("Components requested: {component_list}");
    println!("Please use predefined demos with --demo <ID>");
    return Ok(true);
  }

  if let Some(demo_id) = args.demo {
    cli_text_reader::run_cli_text_reader_with_demo_id(
      vec![],
      args.col,
      demo_id,
    )?;
    return Ok(true);
  }

  if args.tutorial_demo {
    cli_text_reader::run_cli_text_reader_with_demo(vec![], args.col, true)?;
    return Ok(true);
  }

  Ok(false)
}