Skip to main content

module_clients/
module_clients.rs

1use std::env;
2
3use bpi_rs::bangumi::BangumiInfoParams;
4use bpi_rs::ids::{Bvid, MediaId};
5use bpi_rs::video::VideoViewParams;
6use bpi_rs::{BpiClient, BpiResult};
7
8#[tokio::main]
9async fn main() -> BpiResult<()> {
10    let client = client_from_env()?;
11    let video_params = VideoViewParams::from_bvid("BV1xx411c7mD".parse::<Bvid>()?);
12    let bangumi_params = BangumiInfoParams::new(MediaId::new(28_220_978)?);
13
14    if !run_live_example() {
15        println!("module-client quickstart compiled; set BPI_RUN_EXAMPLE=1 to call live APIs");
16        return Ok(());
17    }
18
19    let video = client.video().view(video_params).await?;
20    println!("video: {}", video.title);
21
22    let bangumi = client.bangumi().info(bangumi_params).await?;
23    println!("bangumi: {}", bangumi.media.title);
24
25    if env::var_os("BPI_COOKIE").is_some() {
26        let nav = client.login().nav().await?;
27        println!("logged in: {}", nav.is_login);
28    }
29
30    Ok(())
31}
32
33fn client_from_env() -> BpiResult<BpiClient> {
34    match env::var("BPI_COOKIE") {
35        Ok(cookie) if !cookie.trim().is_empty() => BpiClient::builder().cookie(cookie).build(),
36        _ => BpiClient::builder().build(),
37    }
38}
39
40fn run_live_example() -> bool {
41    env::var("BPI_RUN_EXAMPLE").is_ok_and(|value| value == "1")
42}