16个不稳定版本 (4个重大更改)
0.5.0-rc.1 | 2024年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日 |
852 在 Web编程 中
每月395 次下载
用于 mwbot
67KB
710 行
mwapi_responses
该 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的字段,例如 continue
或 type
,则重命名字段。在这种情况下,附加一个下划线。
支持的模块
该库的元数据是手动收集的。要查看是否支持特定模块,请查看 Git仓库。对缺失模块或参数的贡献总是受欢迎。
库无关
此库不实现或支持任何特定API或HTTP库,而是旨在仅提供类型和辅助函数,以便您以任何您喜欢的方式运行和执行API请求。
mwapi
包提供了一个便利函数来执行查询,使用这些生成的响应:query_response()
。
未来计划
没有对持续查询的特殊支持。未来可能会提供一些类似于 merge() 的函数。
一些其他想法在 Legoktm 的博客文章 中有所概述。
贡献
mwapi_responses
是 mwbot-rs
项目 的一部分。我们一直在寻找新的贡献者,如果您感兴趣,请 联系我们!
许可证
此包根据 GPL-3.0-or-later 许可发布。有关详细信息,请参阅 COPYING。
依赖项
~1–13MB
~155K SLoC