10 个版本
0.1.9 | 2021年10月29日 |
---|---|
0.1.8 | 2021年10月13日 |
0.1.3 | 2021年8月12日 |
417 在 硬件支持 中
每月 43 次下载
用于 datagen_network
130KB
715 行
目录
数据
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