#wrapper #async #sdk #api-wrapper #api-client #api-bindings #graphql-schema

shikimori

一个非官方的异步 Rust 库,允许您与 Shikimori API 交互

10 个不稳定版本 (3 个破坏性更新)

0.4.1 2024 年 8 月 2 日
0.4.0 2024 年 7 月 10 日
0.3.2 2024 年 4 月 24 日
0.3.0 2024 年 3 月 18 日
0.1.1 2023 年 9 月 28 日

#14 in #graphql-schema

Download history 87/week @ 2024-04-19 19/week @ 2024-04-26 1/week @ 2024-05-10 1/week @ 2024-05-24 1/week @ 2024-05-31 86/week @ 2024-07-05 19/week @ 2024-07-12 1/week @ 2024-07-19 115/week @ 2024-08-02

每月 157 次下载

MIT 许可证

63KB
2K SLoC

Rust 1K SLoC // 0.0% comments GraphQL 549 SLoC // 0.3% comments

Shikimori Rust

Crate version Tests License

Shikimori Rust - 作为 Shikimori API 包装器的有效 Rust 库 🦾

📖 文档

安装

从 crates.io 安装 shikimori。将以下行添加到您的 Cargo.toml 文件的依赖项部分

shikimori = "0.4"

或者您可以使用 cargo 添加

cargo add shikimori

用法

您还应使用 querygen 来简化您的操作,它可在该链接找到。在 URL https://shikimori.one/api/graphql 获取模式

use chrono::{DateTime, Utc};

use shikimori::client::ClientBuilder;
use shikimori::cynic::{self, QueryBuilder};

use shikimori::graphql::anime::AnimeKind;
use shikimori::graphql::scalars::{AnimeStatusString, PositiveInt};
use shikimori::graphql::schema;
use shikimori::graphql::types::EntityOrder;

#[derive(cynic::QueryVariables, Debug)]
pub struct AnimesQueryVariables {
    pub page: PositiveInt,
    pub status: AnimeStatusString,
    pub order: EntityOrder,
}

#[derive(cynic::QueryFragment, Debug)]
#[cynic(graphql_type = "Query", variables = "AnimesQueryVariables")]
pub struct AnimesQuery {
    #[arguments(censored: false, page: $page, status: $status, order: $order)]
    pub animes: Vec<Anime>,
}

#[derive(cynic::QueryFragment, Debug)]
pub struct Anime {
    pub id: cynic::Id,
    pub franchise: Option<String>,
    pub episodes: i32,
    pub kind: Option<AnimeKind>,
    pub next_episode_at: Option<DateTime<Utc>>,
    pub url: String,
}

#[tokio::main]
async fn main() {
    let client = ClientBuilder::new().build();

    let response = client
        .query(AnimesQuery::build(AnimesQueryVariables {
            page: PositiveInt::new(1u32),
            status: AnimeStatusString::new("ongoing"),
            order: EntityOrder::Popularity,
        }))
        .await;

    dbg!(&response);
}

// Ok(
//     GraphQlResponse {
//         data: Some(
//             AnimesQuery {
//                 animes: [
//                     Anime {
//                         id: Id(
//                             "21",
//                         ),
//                         franchise: Some(
//                             "one_piece",
//                         ),
//                         episodes: 0,
//                         kind: Some(
//                             Tv,
//                         ),
//                         next_episode_at: Some(
//                             2023-09-10T00:30:00Z,
//                         ),
//                         url: "https://shikimori.one/animes/21-one-piece",
//                     },
//                     Anime {
//                         id: Id(
//                             "51009",
//                         ),
//                         franchise: Some(
//                             "jujutsu_kaisen",
//                         ),
//                         episodes: 23,
//                         kind: Some(
//                             Tv,
//                         ),
//                         next_episode_at: Some(
//                             2023-09-07T14:56:00Z,
//                         ),
//                         url: "https://shikimori.one/animes/51009-jujutsu-kaisen-2nd-season",
//                     },
//                 ],
//             },
//         ),
//         errors: None,
//     },
// )

在启用 register-graphql-schema 功能的 build.rs 文件中

fn main() {
    shikimori::graphql::register_schema();
}

依赖项

~12–24MB
~344K SLoC