#天文学 #查询 #客户端 #查询 #访问 #adql #vizie-r

vizier-adql

使用 ADQL 查询 VizieR 天文数据的简单 Rust 客户端

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 编程

Download history 210/week @ 2024-04-22 124/week @ 2024-04-29 9/week @ 2024-07-01

每月 160 次下载

GPL-2.0 许可证

9KB
180

vizier-rs

Tests Crates.io

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