#csv #struct #codegen

app csv2struct

从 CSV 生成 Rust 结构定义

1 个不稳定版本

0.1.0 2019年1月26日

#135 in #codegen

MIT 许可证

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