5 个版本
0.2.0 | 2024 年 4 月 28 日 |
---|---|
0.1.3 | 2024 年 4 月 28 日 |
0.1.2 | 2024 年 4 月 28 日 |
0.1.1 | 2024 年 4 月 23 日 |
0.1.0 | 2024 年 4 月 23 日 |
#2011 in Web 编程
每月 160 次下载
9KB
180 行
vizier-rs
Rust 的基本 VizieR 客户端
允许通过 VizieR TAP API 容易且类型安全地访问,使用 ADQL 查询广泛的天文目录。
安装
运行 $ cargo add vizier-adql
,或者将 vizier-adql = "0.2.0"
添加到 Cargo.toml
中的 [dependencies]
部分。
基本、无类型使用
use vizier_adql::Client;
use serde_json::Value;
// 1. Create a client
let client = Client::default();
// 2. Execute queries
let objects = client
.query::<Value>("SELECT TOP 100 * FROM \"I/261/fonac\"")
.await
.unwrap()
.data();
// ...
Client::default()
将使用 http://tapvizier.u-strasbg.fr/TAPVizieR/tap/sync
作为 TAP 端点。如果您需要指定不同的端点,请使用 Client::new("your_endpoint_url")
。
VizieR 列表元数据也通过 QueryResult::meta
可在结果中访问。
同步/异步
如果您不想使用异步,请在该 crate 中启用 is_sync
功能。API 不会更改,除了现在 Client::query
会阻塞并直接返回值。
类型化使用
为了严格解析响应,创建一个类似于响应中元素的 struct 并为它派生 Deserialize
。
#[derive(Deserialize)]
struct CatalogObject {
AC2000: i32,
ACT: Option<i32>,
#[serde(rename = "B-R")]
BR: Option<f64>,
#[serde(rename = "B-V")]
BV: Option<f64>,
Bmag: f64,
DEJ2000: f64,
#[serde(rename = "Ep-1900")]
Ep1900: f64,
Qflag: Option<i32>,
RAJ2000: f64,
pmDE: f64,
pmRA: f64,
q_Bmag: Option<i32>,
recno: i32,
}
然后,像这样查询和解析
let objects = client
.query::<CatalogObject>("SELECT TOP 100 * FROM \"I/261/fonac\"")
.await
.unwrap()
.data()
// ...
依赖项
~4–16MB
~232K SLoC