#api-response #mediawiki #type #api

mwapi_responses

自动生成MediaWiki API响应的严格类型

16个不稳定版本 (4个重大更改)

0.5.0-rc.12024年6月2日
0.4.2 2024年1月23日
0.4.1 2023年12月21日
0.3.4 2023年7月15日
0.2.2 2021年11月15日

852Web编程

Download history 8/week @ 2024-05-02 14/week @ 2024-05-16 38/week @ 2024-05-23 127/week @ 2024-05-30 264/week @ 2024-06-06 159/week @ 2024-06-13 130/week @ 2024-06-20 93/week @ 2024-06-27 128/week @ 2024-07-04 92/week @ 2024-07-11 98/week @ 2024-07-18 106/week @ 2024-07-25 112/week @ 2024-08-01 88/week @ 2024-08-08 76/week @ 2024-08-15

每月395 次下载
用于 mwbot

GPL-3.0-or-later

67KB
710

mwapi_responses

crates.io docs.rs docs (main) pipeline status coverage report

mwapi_responses 库为动态MediaWiki动作API查询提供严格类型。目标是忠实地表示API的JSON结构,同时让用户免于手动编写每个查询的serde兼容struct。

列表模块

use mwapi_responses::prelude::*;
#[query(
    list = "logevents",
    leaction = "newusers/create",
    leprop = "user|type",
    lelimit = "100"
)]
struct Response;

这会创建一个与给定查询的API响应相匹配的 Response 结构体。大致来说,它会展开为

#[derive(Debug, Clone, serde::Deserialize)]
pub struct Response {
    #[serde(default)]
    pub batchcomplete: bool,
    #[serde(rename = "continue")]
    #[serde(default)]
    pub continue_: HashMap<String, String>,
    pub query: ResponseBody,
}

#[derive(Debug, Clone, serde::Deserialize)]
pub struct ResponseBody {
    pub logevents: Vec<ResponseItemlogevents>,
}

#[derive(Debug, Clone, serde::Deserialize)]
pub struct ResponseItemlogevents {
    pub user: String,
    #[serde(rename = "type")]
    pub type_: String,
}

或从页面获取各种属性

use mwapi_responses::prelude::*;
#[query(
    prop="info|revisions",
    inprop="url",
    rvprop="ids"
)]
struct Response;

这会展开为

#[derive(Debug, Clone, serde::Deserialize)]
pub struct Response {
    #[serde(default)]
    pub batchcomplete: bool,
    #[serde(rename = "continue")]
    #[serde(default)]
    pub continue_: HashMap<String, String>,
    pub query: ResponseBody,
}

#[derive(Debug, Clone, serde::Deserialize)]
pub struct ResponseBody {
    pub pages: Vec<ResponseItem>,
}

#[derive(Debug, Clone, serde::Deserialize)]
pub struct ResponseItem {
    pub canonicalurl: String,
    pub contentmodel: String,
    pub editurl: String,
    pub fullurl: String,
    pub lastrevid: Option<u64>,
    pub length: Option<u32>,
    #[serde(default)]
    pub missing: bool,
    #[serde(default)]
    pub new: bool,
    pub ns: i32,
    pub pageid: Option<u32>,
    pub pagelanguage: String,
    pub pagelanguagedir: String,
    pub pagelanguagehtmlcode: String,
    #[serde(default)]
    pub redirect: bool,
    pub title: String,
    pub touched: Option<String>,
    #[serde(default)]
    pub revisions: Vec<ResponseItemrevisions>,
}

#[derive(Debug, Clone, serde::Deserialize)]
pub struct ResponseItemrevisions {
    pub parentid: u64,
    pub revid: u64,
}

在两种情况下,您都可以通过调用 Response::items() 来轻松遍历 &[(&str, &str)]

为了避免在多个地方重复参数,您可以通过调用 Response::params() 来获取一个 &[(&str, &str)] 的参数列表,这些参数是提供给 #[query(...)] 宏的。

如果字段不能用作Rust的字段,例如 continuetype,则重命名字段。在这种情况下,附加一个下划线。

支持的模块

该库的元数据是手动收集的。要查看是否支持特定模块,请查看 Git仓库。对缺失模块或参数的贡献总是受欢迎。

库无关

此库不实现或支持任何特定API或HTTP库,而是旨在仅提供类型和辅助函数,以便您以任何您喜欢的方式运行和执行API请求。

mwapi 包提供了一个便利函数来执行查询,使用这些生成的响应:query_response()

未来计划

没有对持续查询的特殊支持。未来可能会提供一些类似于 merge() 的函数。

一些其他想法在 Legoktm 的博客文章 中有所概述。

贡献

mwapi_responsesmwbot-rs 项目 的一部分。我们一直在寻找新的贡献者,如果您感兴趣,请 联系我们

许可证

此包根据 GPL-3.0-or-later 许可发布。有关详细信息,请参阅 COPYING

依赖项

~1–13MB
~155K SLoC