#json #json-format #data #systems #stream #generator #un

bin+lib datagen_gnss

用于测试测量系统的JSON格式数据生成器

10 个版本

0.1.9 2021年10月29日
0.1.8 2021年10月13日
0.1.3 2021年8月12日

417硬件支持

每月 43 次下载
用于 datagen_network

MIT 许可证

130KB
715

目录

  1. 数据
    1. ValuePair
    2. Point
    3. Equipment
    4. DT_GEN 格式
    5. 数据
  2. 随机数据生成
  3. 流 I/O
    1. 文件读取
    2. 读取流并传递向量
    3. 读取流并传递到流
  4. 测试

数据

Data 结构包含一个基准传感器可能生成的所有信息。

需要构建以下内容。

DONE ValuePair

DONE Point

DONE Equipment

DONE DT_GEN 格式

DONE 数据

所有内容都在目录结构下定义。

tree src

随机数据生成

这是构建随机数据的函数系列,按请求生成。

generators.rs 中,我们有 create_data 函数,该函数生成一个随机的 Data 实例。

流 I/O

创建命令,允许输入并反序列化。无论是流还是文件。

有两个同步函数,允许从流中读取或写入。

  • read_io
  • write-io

从这两个函数中衍生出与文件相关的函数,用于读取或写入文件。

  • read_file
  • write_file

同样,使用 tokio 以异步方式创建从 buffer 读取并发送到通道的函数以及相反的过程。

  • render_to_stream
  • stream_to_writer

这些功能对于使此模块可用于服务器tcp或数据生成服务(例如模拟传感器)至关重要。

文件读取

stream.rs -> read_file 中实现了简单的函数,该函数接受整个文件并将其直接反序列化为 Data 数组。

这只适用于 json 类型的文件。

pub fn read_file<P: AsRef<Path>>(
    path: P) -> Result<Vec<Data>, Box<dyn Error>> {
    // open file if exists path
    let file = File::open(path)?;
    // set file to buffer
    let reader = BufReader::new(file);
    // read the json contents
    let json_data = serde_json::from_reader(reader)?;
    // Return Data
    Ok(json_data)
}

读取流并传递向量

如果数据来源是流,则使用 read_io,它接受一系列值(或非 json 文件)

pub fn read_io<R: io::BufRead >(
    mut input: R,
    end_flag: &String,
    print: bool) -> Result<Vec<Data>, Box<dyn Error>> {
    let mut lines: Vec<String> = vec![];
    let mut dataset: Vec<Data> = vec![];
    for value in input.lines() {
        let line = value?;
          if line.as_str().trim() == end_flag   {
              let new_value = lines.join("");
              let new_data = Data::json_loads(&new_value);
              if print {
                  println!("{}", new_data);
              }
              dataset.push(new_data);
              lines.clear();
          } else {
              if !line.trim().is_empty() {
                  lines.push(line);
                  }
          }
        }
    Ok(dataset)
}

读取流并传递到流

在这种情况下,而不是创建累加器,直接发送转换后的 Data 通过具有 Write 特征的流。

例如,可能需要通过消息队列将数据发送到套接字流,然后创建一个模块来接收数据、处理数据并将其发送到其他地方,如果需要的话。这也可以用于发送到并发进程或分离的原子功能。

测试

所有用于创建数据以及通过流发送或接收数据的操作都经过测试。

查看 测试 可以帮助学习使用这些函数。

依赖项

~4–11MB
~116K SLoC