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

GPL-3.0-or-later

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