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 次下载

MIT 许可证

24KB
430

Rust: wsd 是一个直观的 crate,提供简单定义的交付内容

[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