1 个不稳定版本
0.1.0 | 2019年1月26日 |
---|
#135 in #codegen
10KB
180 行
csv2struct
根据一些非常基本的规则从 CSV 生成结构定义。
示例
$ cat test.csv
foo,bar,baz,qux
1,2,3,green
4.4,5,6,red
7.2,,8,blue
$ cat test.csv | csv2struct
#[derive(Debug, Clone, Copy, Eq)]
pub struct Record {
pub foo: f32,
pub bar: Option<i32>,
pub baz: i32,
pub qux: Qux,
}
#[derive(Debug, Clone, Copy, Eq)]
pub enum Qux {
Green,
Red,
Blue,
}
有两个规则集在起作用。首先,我们对每个列中的每个值应用以下规则集,并记录结果。
if value == "" => Empty
if let Some(_) = value.parse::<i32>() => Integer
if let Some(_) = value.parse::<f32>() => Real
else => Factor(value)
然后,我们对每个列的结果应用以下规则
- 如果任何值被解析为 Factor,则将该列视为因子。
- 否则,如果并非所有值都被解析为 Integer,则将该列视为实数。
- 否则,将该列视为整数。
- 如果有任何值缺失,则将对现有值应用上述规则,并将结果包装在
Option
中。
最后,我们为每个列生成一个字段的 struct 定义。对于因子,我们还将生成一个枚举。
依赖项
~2MB
~23K SLoC