7 个版本 (4 个重大变更)
0.5.0 | 2023 年 1 月 17 日 |
---|---|
0.4.2 | 2023 年 1 月 16 日 |
0.3.0 | 2022 年 11 月 11 日 |
0.2.0 | 2022 年 10 月 25 日 |
0.1.0 | 2022 年 10 月 11 日 |
#32 in #gemini
32KB
497 行代码(不含注释)
Leda
一个实现多个小型互联网协议客户端逻辑的 crate。目前仅支持 Gemini,但计划在未来支持其他协议。
入门
这是一个最小示例,展示了如何使用此库。它将获取 Gemini 主页,并以纯 gemtext 格式和 html 格式打印其内容。
您可以通过运行以下命令来运行此示例:cargo run --example readme
。
use leda::gemini::{self, gemtext::Gemtext};
use std::time::Duration;
fn main() {
let url = String::from("gemini://gemini.circumlunar.space/");
let mut client = gemini::Client::with_timeout(Some(Duration::from_secs(5)))
.expect("Failed to create gemini client");
let response = client.request(url).expect("Failed to retrieve gemini page");
// Check that the server responded successfully with a gemtext document
let body = if let gemini::header::StatusCode::Success = response.header.status {
if !response.header.meta.starts_with("text/gemini") {
panic!("The server didn't respond with a gemtext document when we expected it to");
}
response.body.as_ref().unwrap()
} else {
// you can handle differents errors, redirects, and input requests as you see fit from
// here on!
panic!("Page requested didn't return a body!");
};
let body = std::str::from_utf8(&body).expect("Failed to parse body as utf8");
assert!(Gemtext::new(body).is_ok());
println!("raw body: \n{}\n", body);
}
依赖项
~8–19MB
~395K SLoC