8 个版本 (4 个稳定版)
1.1.1 | 2022 年 11 月 16 日 |
---|---|
1.0.1 | 2022 年 11 月 11 日 |
0.0.3 | 2022 年 11 月 3 日 |
0.0.0 | 2022 年 10 月 31 日 |
#617 在 压缩 分类中
每月 37 次下载
24KB
430 行
Rust: wsd
是一个直观的 crate,提供简单定义的交付内容
- Crate: https://crates.io/crates/wsd
- 文档: https://docs.rs/wsd
- 在 Cargo.toml 中添加依赖项
[dependencies]
wsd = "1.0.0"
原生 JSON 用于 Rust
use std::collections::HashMap;
use wsd::json::*;
fn main()
{
let mut json = json!{
name: "native json",
style: {
color: "red",
size: 12,
bold: true,
range: null
},
array: [5,4,3,2,1],
vector: vec![1,2,3,4,5],
hashmap: HashMap::from([("a", 1), ("b", 2), ("c", 3)]),
students: [
{name: "John", age: 18},
{name: "Jack", age: 21},
],
};
// Native access
json.style.size += 1;
json.students[0].age += 2;
// Stringify
let text = json.stringify(4);
// Parse
json.hashmap.clear();
if let Err(e) = json.parse(&text) {
println!("error: {}", e);
}
println!("json.hashmap = {:#?}", json.hashmap);
}
制作 HTTP 请求的最简单方法
获取
fn test() {
wsd::http::get("https://docs.rs/", |data| {
println!("status = {}, data = {}", data.status(), data.text());
});
}
发布
fn test() {
wsd::http::post("https://docs.rs/", "{id: 100}", |data| {
println!("status = {}, data = {}", data.status(), data.text());
});
}
请求
use wsd::http::*;
fn test() {
let mut c = Request::new(Method::POST, "https://docs.rs");
c.gzip(true);
c.timeout(5.0);
c.header("TOKEN", "1234567890");
c.send("{id: 100}", |data| {
println!("Data: {}", data.text());
println!("Headers: {:#?}", data.headers());
});
}
直观的文件类
只是对 rust File 的便捷包装,检查返回值,就像我们使用 C API 一样,不需要检查 Result,也不需要 unwrap() 等。
示例
using wsd::fs::*;
fn test() -> i32 {
let mut f = File::new();
if f.open("test.txt", O_CREATE | O_RW) != 0 {
// check the error
println!("Error: {}", f.error());
return -1;
}
let data = "Hello World!";
let n = f.write(data);
if n < 0 {
// write error
}
f.rewind();
let mut buf = [0; 4096];
let n = f.read(&mut buf);
if n > 0 {
// success to read n bytes
}
f.seek(256, SEEK_SET);
f.write("more data");
f.close();
return 0;
}
方法
File::new()
File::open()
File::read()
File::write()
File::close()
File::error()
File::path()
File::seek()
File::position()
File::length()
File::is_none()
打开标志
O_CREATE
O_TRUNCATE
O_RW
O_READ
O_WRITE
O_APPEND
O_NONBLOCK
查找标志
SEEK_SET
SEEK_CUR
SEEK_END
依赖关系
~5–17MB
~255K SLoC