vn-core 0.11.1

VNDB for Rust
Documentation
use std::sync::LazyLock;
use vn_core::StaffField::*;
use vn_core::{Language, StaffGender, StaffId, Vndb};

const SUMIRE: &str = "Uesaka Sumire";

static SUMIRE_ID: LazyLock<StaffId> = LazyLock::new(|| {
  let id = format!("{}{}", StaffId::PREFIX, 4466);
  StaffId::new(&id).unwrap()
});

#[tokio::test]
async fn get_staff() {
  let vndb = Vndb::new();
  let filters = r#"["id", "=", "s4466"]"#;
  let results = vndb
    .post()
    .staff()
    .filters(filters.try_into().unwrap())
    .fields([Name, Lang, Gender, IsMain])
    .results(5)
    .send()
    .await
    .unwrap()
    .results;

  let staff = results
    .iter()
    .find(|staff| staff.ismain.unwrap_or(false))
    .unwrap();

  let name = staff.name.as_deref().unwrap();
  let lang = staff.lang.as_ref().unwrap();
  let gender = staff.gender.as_ref().unwrap();

  assert_eq!(&staff.id, &*SUMIRE_ID);
  assert!(name.eq_ignore_ascii_case(SUMIRE));
  assert_eq!(lang, &Language::Japanese);
  assert_eq!(gender, &StaffGender::Female);
}

#[tokio::test]
async fn find_staff() {
  let staff = Vndb::new()
    .find_staff(&*SUMIRE_ID)
    .fields([Name, Lang, Gender, IsMain])
    .send()
    .await
    .unwrap()
    .results
    .pop_front()
    .unwrap();

  assert_eq!(&staff.id, &*SUMIRE_ID);
  assert_eq!(staff.name.as_deref(), Some(SUMIRE));
  assert_eq!(staff.lang, Some(Language::Japanese));
}

#[tokio::test]
async fn search_staff() {
  let staff = Vndb::new()
    .search_staff(SUMIRE.to_ascii_lowercase())
    .fields([Name, Lang, Gender, IsMain])
    .send()
    .await
    .unwrap()
    .results
    .pop_front()
    .unwrap();

  assert_eq!(&staff.id, &*SUMIRE_ID);
  assert_eq!(staff.name.as_deref(), Some(SUMIRE));
  assert_eq!(staff.lang, Some(Language::Japanese));
}