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 编码
15KB
Sing
Std
I/o
Negotiator
Generator
什么是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