#features #programs #program #supported

bin+lib feature-check

查询程序支持的功能

5 个稳定版本

2.2.0 2024年7月29日
2.1.0 2024年2月10日
2.0.0 2022年10月11日
1.0.1 2021年12月17日
1.0.0 2021年6月24日

#378 in 解析器实现

Download history 155/week @ 2024-07-29

每月155次下载

BSD-2-Clause

54KB
1K SLoC

feature-check - 查询程序支持的功能

feature-check 库通过多种方法(例如,使用 --features 命令行选项运行程序)帮助程序从程序中获取支持的功能列表,并检查特定功能的是否存在以及版本。

列出程序的功能

在配置对象中使用默认的 List 操作模式,指定程序名称以及可能用到的命令行选项和功能列表行应该开始的字符串

use std::error::Error;

use feature_check::defs::{Config, Obtained};
use feature_check::obtain as fobtain;

fn main() -> Result<(), Box<dyn Error>> {
    let config = Config {
        program: "curl".to_string(),
        option_name: "--version".to_string(),
        ..Config::default()
    };
    match fobtain::obtain_features(&config)? {
        Obtained::Failed(err) => eprintln!("Could not obtain the features: {}", err),
        Obtained::NotSupported => eprintln!("Querying features not supported"),
        Obtained::Features(res) => println!("{} features", res.len()),
    };
    Ok(())
}

将单个功能与版本号进行比较

一旦查询到功能列表,使用先前从 expr::parse_simple() 函数获得的表达式

use std::error;

use feature_check::defs::{Config, Obtained};
use feature_check::expr::{self as fexpr, CalcResult};
use feature_check::obtain as fobtain;

fn main() -> Result<(), Box<dyn error::Error>> {
    let query = "feature-check >= 0.2";
    let expr = fexpr::parse_simple(&query)?;
    let config = Config {
        program: "feature-check".to_string(),
        ..Config::default()
    };
    match fobtain::obtain_features(&config)? {
        Obtained::Failed(err) => eprintln!(
            "Could not obtain the features for {}: {}",
            config.program, err
        ),
        Obtained::NotSupported => eprintln!("Querying features not supported"),
        Obtained::Features(res) => {
            println!("{} features", res.len());
            match res.contains_key("feature-check") {
                false => eprintln!("No 'feature-check' in the features list"),
                true => match expr.get_value(&res)? {
                    CalcResult::Bool(value) => println!("{}: {}", query, value),
                    other => eprintln!("Unexpected result: {:?}", other),
                },
            };
        }
    };
    Ok(())
}

有关 crate 的更改历史,请参阅源分发中的 变更日志 文件。

依赖关系

~2.5–3.5MB
~69K SLoC