如何将常量映射到自定义字符串

恩巴里

我正在使用git2板条箱获取git存储库上状态列表,这是我正在使用的代码:

use git2::{Repository, StatusOptions, StatusShow};
use std::{collections::HashMap, env};

fn main() {
    let path = env::current_dir().unwrap();
    let repo = Repository::discover(path).unwrap();
    let mut status_opt = StatusOptions::new();
    status_opt
        .show(StatusShow::IndexAndWorkdir)
        .include_untracked(true)
        .include_unmodified(false)
        .no_refresh(false);
    let status_result = repo.statuses(Some(&mut status_opt)).unwrap();

    let mut map: HashMap<git2::Status, u32> = HashMap::new();

    for status_entry in status_result.iter() {
        *map.entry(status_entry.status()).or_insert(0) += 1;
    }
    println!("{:?}", map);
}

基于当前存储库的修改,返回和的映射git2::Status,但我想向command返回类似的输出git status --porcelain

例如,根据存储库的更改,这是的输出git status --porcelain

M  file_a
AM file_b
A  file_c
?? file_e
?? file_f

将输出传递给awk

$ git status --porcelain | awk -v ORS=", " 'NR>0{arr[$1]++}END{for (a in arr) print a, arr[a]}'
A 1, ?? 2, M 1, AM 1,

使用上面Rust代码将返回:

{INDEX_NEW: 1, WT_NEW: 2, INDEX_NEW | WT_MODIFIED: 1, INDEX_MODIFIED: 1}

我想知道如何将git2::Status常量的值映射到自定义字符串(匹配porceline字符串),例如:

INDEX_NEW                -> A 
INDEX_NEW | WT_MODIFIED  -> AM
INDEX_MODIFIED           -> M
WT_NEW                   -> ??

主要如何处理类似情况INDEX_NEW | WT_MODIFIED将映射为AM

彼得·瓦罗

以下代码段将您的代码片段map转换为所需的表示形式。所提供的示例将这些值集合到另一个中,HashMap并且它具有一个可以惊慌的手臂,但是可以随时随意转换这些git2::Status值(即,当您第一次遍历它们时)。

let mut output = HashMap::new();
for (key, value) in map.iter()
{
    let key = match key
    {

        s if s.contains(git2::Status::INDEX_NEW) &&
             s.contains(git2::Status::WT_MODIFIED) => "AM",
        s if s.contains(git2::Status::INDEX_NEW) => "A",
        s if s.contains(git2::Status::INDEX_MODIFIED) => "M",
        _ => panic!("Unexpected status"),
    };

    output.insert(key, value);
}

println!("{:?}", output);

如果您正在查看所选库的示例,则会发现非常相似的内容: git2-rs/examples/status.rs

有关模式匹配语法的更多信息,请参阅The Rust Programming Book

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

EF Core 5 - 如何将 EF.Functions.Like 与映射到 JSON 字符串的自定义属性一起使用?

将JSON中的自定义字符串映射到POGO枚举案例

CSVHelper如何将字符串映射到对象

如何将字符串映射到 RGB 值?

自定义哈希表实现-将字符串映射到整数时出现内存错误

如何将 Acumatica 字符串字段自定义为字符串列表?

如何将类型转换定义为自定义类型的字符串

如何将字符串数组映射到新的字符串数组?

使用自定义SqlMapper.ITypeHandler将Enum映射到字符串列-Dapper

如何将 PS 对象输出为自定义格式化字符串

如何将Fsharp中的自定义类型转换为JSON字符串?

如何将JSON字符串日期转换为自定义格式日期?

如何将字符串渲染为自定义的React组件?

如何将日期字符串转换为自定义日期格式?

如何将字符串数组转换为自定义嵌套对象

如何将字符串转换为自定义数据类型

如何将条件设置为数组值以显示我的自定义字符串

如何将字符串参数传递给自定义存储库方法?

如何将规则日期值从数组转换为自定义字符串

如何将JSON字段映射到自定义对象属性?

如何将每个用户的许多自定义表映射到真实的数据库?

如何将JSON :: Any映射到Crystal语言中的自定义对象?

如何将地图列表映射到自定义类列表中?

如何将非零索引映射到字符串中的每个字符

如何将二维矢量双精度映射到字符串?

如何将任意字符串集映射到整数并返回R?

如何将JSON字符串映射到Kotlin Map

例如,如何将字符串形式的已解析的Promise对象映射到按钮上

如何将字符串映射到Java中的函数?