ITPub博客

首页 > 数据库 > 数据库开发技术 > 【Rust日报】IQ - 检索深层Rust结构

【Rust日报】IQ - 检索深层Rust结构

原创 数据库开发技术 作者:Rust语言中文社区 时间:2024-12-11 23:20:05 0 删除 编辑

IQ - 检索深层Rust结构

IQ (Introspect Query) 让你通过简单的路径语法查询标准结构体、映射、枚举、数组、元组以及它们的嵌套组合,从而获取深层次的值。比如示例代码:

use iq::IQ;
use serde::{ Deserialize, Serialize };

#[derive(Debug, Serialize)]
struct Car {
    pub engine: String,
    pub passengers: Vec<Dog>,
    pub driver: Dog,
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Dog {
    pub name: String,
    pub ears: u8,
}

...

// extract "primitive" values as strings with extract_primitive
assert_eq!(car.extract_primitive("driver.ears").unwrap(), "2");
assert_eq!(car.extract_primitive("driver.name").unwrap(), "Rex");
assert_eq!(car.extract_primitive("passengers.1.name").unwrap(), "Laïka");
assert_eq!(car.extract_primitive("passengers.1"), None); // it's not a primitive

// extract any value as Json with extract_json
assert_eq!(car.extract_json("wrong.path"), None);
assert_eq!(car.extract_json("driver.ears").unwrap(), "2");
assert_eq!(car.extract_json("driver.name").unwrap(), r#""Rex""#);
assert_eq!(
    car.extract_json("passengers.0").unwrap(),
    r#"{"name":"Roverandom","ears":1}"#
);
assert_eq!(car.extract_json("passengers.3"), None);

// extract any Deserializable value with extract_value
assert_eq!(
    car.extract_value("passengers.1").unwrap(),
    Some(Dog {
        name: "Laïka".to_string(),
        ears: 2
    }),
);

// You don'
t have to concat tokens if you build the path
assert_eq!(
    car.extract_primitive(vec!["passengers", "0", "ears"])
        .unwrap(),
    "1"
);

// Extract functions are available both as a trait and as standalone functions.
assert_eq!(iq::extract_primitive(&car, "driver.name").unwrap(), "Rex");

DiffSol - 解常微分方程的Rust库

Diffsol 是一个用于求解常微分方程(ODE)或半显式微分代数方程(DAE)的 Rust 库。你可以直接使用 nalgebra 或 faer crates 中的向量和矩阵,或者通过实现 diffsol 中的各种向量和矩阵 trait 来实现你自己的类型。

https://github.com/martinjrobins/diffsol

--

From 日报小组 Mike

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss
  • 微信公众号:Rust语言中文社区


原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-06-11

  • 博文量
    1769
  • 访问量
    718396