4个版本

0.1.3 2022年4月5日
0.1.2 2022年3月27日
0.1.1 2022年3月27日
0.1.0 2022年3月27日

#2116 in 编码

AGPL-3.0-or-later

15KB

Sing

Std

I/o

Negotiator

Generator

Crates.io License

什么是sing?

这个crate旨在在Rust库中的特质和命令行之间创建接口。它通过提供两个宏来实现这一点

  • sing_add_trait,它作为特质的实现属性,收集了由sing_loop!使用的函数签名。
  • sing_loop!,它接受特质对象、序列化和反序列化函数以及一些可选参数。它生成一个循环解析函数调用,从STDIN(或任何其他BufRead流)中读取,通过在对象上调用适当的方法来评估它们,并将它们返回到STDOUT(或任何其他Write流)。

使用示例

use serde::{Serialize, Deserialize};
use sing_rs::{sing_add_trait, sing_loop};

trait FruitTree {
         fn shake(&self, shakes: u32) -> Vec<Fruit>;
}

#[derive(Debug, Serialize, Deserialize)]
struct Fruit {
         fruit_type: String,
}

struct BananaTree;

#[sing_add_trait()]
impl FruitTree for BananaTree {
         fn shake(&self, shakes: u32) -> Vec<Fruit>{
                  let mut out = vec!();

                  for _ in 0..shakes {
                                out.push(Fruit{fruit_type: String::from("Banana")});
                  }
                  
                  out
         }
}

fn main() {
         let tree = BananaTree {};
         
    sing_loop!(tree, [different, ron::to_string, ron::from_str],);
}

协商者?真的吗?

是的,这有点牵强,但我真的想在我的Rust命令行项目中唱歌和clap

为什么叫这个名字?

见上面。

依赖关系

~12–21MB
~317K SLoC