#api-bindings #api #beatsaver #beatsaber #beastsaber #bsaber

beatsaver-rs

与 beatsaver.com API 交互的 Rust 库

5 个不稳定版本

0.2.0 2021年1月10日
0.1.2 2020年11月30日
0.1.1 2020年11月26日
0.0.2 2020年11月25日
0.0.1 2020年11月21日

#api 中排名 1519

MIT 许可证

2MB
4K SLoC

beatsaver-rs

Crates.io Documentation License GitHub issues Build

这是一个用于与 beatsaver.com API 交互的 Rust 库项目。

安装

将以下内容添加到依赖项

beatsaver-rs = "0.2.0"

使用方法

基本用法

use beatsaver_rs::BeatSaverApi;
use beatsaver_rs::client::BeatSaver;
use beatsaver_rs::map::Map;
use bytes::Bytes;
use std::convert::TryInto;

#[tokio::main]
async fn main() {
    // Create a new client
    let client = BeatSaver::new();

    // Get map with key `1`
    let map: Map = client.map(&"1".try_into().unwrap()).await.unwrap();
    println!("Map by key: {}", map.name);

    // Get map with hash fda568fc27c20d21f8dc6f3709b49b5cc96723be
    let map: Map = client.map(&"fda568fc27c20d21f8dc6f3709b49b5cc96723be".try_into().unwrap()).await.unwrap();
    println!("Map by hash: {}", map.name);

    // Download map
    let map_download: Bytes = client.download((&map).into()).await.unwrap();
    let map_download: Bytes = client.download(&"1".try_into().unwrap()).await.unwrap();
    // save map somewhere
}

迭代器

use beatsaver_rs::BeatSaverApi;
use beatsaver_rs::client::BeatSaver;
use beatsaver_rs::map::Map;

#[tokio::main]
async fn main() {
    // Create a new client
    let client = BeatSaver::new();
    
    // Get the latest maps
    let mut maps = client.maps_latest();
    
    // Iterate while there are more maps
    while let Some(map) = maps.next().await {
        match map {
            // We retrieved the map
            Ok(m) => println!(" => {}", m.name),
            // We were rate limited, wait the specified time
            Err(BeatSaverApiError::RateLimitError(r)) => {
                println!("Rate Limit: {:?}", r.reset_after);
                sleep(r.reset_after).await;
            }
            // Some other error, continue to try again, break to stop
            Err(e) => {
                println!("Error: {:?}", e),
                break;
            }
        }
    }
}

后端

目前,此包支持三个后端

默认情况下,使用 reqwest,但您可以通过启用 [backend]_backend 功能(例如,surf_backend)来指定特定的后端。

测试

在测试时,确保启用所有功能以确保所有后端都得到适当的测试

cargo test --all-features

许可证

MIT

依赖项

~3–17MB
~268K SLoC