Каков идиоматический способ написания справочных страниц для инструментов Rust CLI?

Приложения CLI на Unix-подобных операционных системах обычно предоставляют справочные страницы. Я еще не видел хорошего руководства по тому, как это сделать в экосистеме ржавчины - каков идиоматический способ сделать это?

Я знаю о скриптах сборки сборки Cargo, так ли это вообще делается? Если да, то как он будет генерировать man-страницы и как он будет обрабатывать установку человека на разных ОС?

Ответ 1

В настоящее время я знаю, что лучше всего использовать контейнер man. Это все еще в стадии разработки, и добавление улучшенной поддержки генерации man-страниц является областью, над которой активно работает рабочая группа CLI.

Как более подробно описано в README, man позволяет генерировать справочные страницы из синтаксиса, например:

use man::prelude::*;

fn main() {
    let page = Manual::new("basic")
        .about("A basic example")
        .author(Author::new("Alice Person").email("[email protected]"))
        .author(Author::new("Bob Human").email("[email protected]"))
        .flag(
            Flag::new()
                .short("-d")
                .long("--debug")
                .help("Enable debug mode"),
        )
        .flag(
            Flag::new()
                .short("-v")
                .long("--verbose")
                .help("Enable verbose mode"),
        )
        .option(
            Opt::new("output")
                .short("-o")
                .long("--output")
                .help("The file path to write output to"),
        )
        .example(
            Example::new()
                .text("run basic in debug mode")
                .command("basic -d")
                .output("Debug Mode: basic will print errors to the console")
            )
        .custom(
            Section::new("usage note")
                .paragraph("This program will overwrite any file currently stored at the output path")
        )
        .render();

    println!("{}", page);
}

Ответ 2

Книга приложений CLI, кажется, теперь имеет страницу об этом.

По сути, он использует возможности хлопка для создания страницы руководства с несколькими аннотациями к структуре, используемой хлопком. Некоторый код ржавчины затем генерирует страницу руководства, я поместил бы ее в build.rs.