cli-engine 0.2.1

Rust CLI framework for consistent command modules
Documentation
use clap::Command;

use crate::{
    CliRunOutput, Envelope, Middleware,
    error::exit_code_for_error,
    output::{OutputFormat, render},
    tree::{build_tree_from_clap, render_tree_human},
};

pub(crate) fn render_tree(root: &Command, app_id: &str, middleware: &Middleware) -> CliRunOutput {
    let format: OutputFormat = match middleware.output_format.parse() {
        Ok(format) => format,
        Err(err) => {
            return CliRunOutput {
                exit_code: exit_code_for_error(&err),
                rendered: err.to_string(),
            };
        }
    };
    let tree = build_tree_from_clap(root);
    if format == OutputFormat::Human {
        return CliRunOutput {
            exit_code: 0,
            rendered: render_tree_human(&tree),
        };
    }
    let envelope =
        Envelope::success(tree, app_id.to_owned()).prepare_for_render(&middleware.verbose);
    match render(format, &envelope) {
        Ok(rendered) => CliRunOutput {
            exit_code: 0,
            rendered,
        },
        Err(err) => CliRunOutput {
            exit_code: exit_code_for_error(&err),
            rendered: err.to_string(),
        },
    }
}