use shikicrate::{ShikicrateClient, queries::*};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("π Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Shikicrate GraphQL ΠΊΠ»ΠΈΠ΅Π½ΡΠ°\n");
let client = ShikicrateClient::new()?;
println!("πΊ Π’Π΅ΡΡ 1: ΠΠΎΠΈΡΠΊ Π°Π½ΠΈΠΌΠ΅");
println!("ΠΠΎΠΈΡΠΊ: 'bakemono', Π»ΠΈΠΌΠΈΡ: 3, ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΡΠΏΠ΅ΡΠ»Ρ\n");
let animes = client
.animes(AnimeSearchParams {
search: Some("bakemono".to_string()),
limit: Some(3),
kind: Some("!special".to_string()),
page: None,
})
.await?;
println!("ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ Π°Π½ΠΈΠΌΠ΅: {}\n", animes.len());
for (i, anime) in animes.iter().enumerate() {
println!(" {}. {} (ID: {})", i + 1, anime.name, anime.id);
if let Some(russian) = &anime.russian {
println!(" Π ΡΡΡΠΊΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅: {}", russian);
}
if let Some(score) = anime.score {
println!(" ΠΡΠ΅Π½ΠΊΠ°: {:.2}", score);
}
if let Some(status) = &anime.status {
println!(" Π‘ΡΠ°ΡΡΡ: {}", status);
}
println!();
}
println!("π Π’Π΅ΡΡ 2: ΠΠΎΠΈΡΠΊ ΠΌΠ°Π½Π³ΠΈ");
println!("ΠΠΈΠΌΠΈΡ: 5\n");
let mangas = client
.mangas(MangaSearchParams {
limit: Some(5),
search: None,
kind: None,
page: None,
})
.await?;
println!("ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ ΠΌΠ°Π½Π³ΠΈ: {}\n", mangas.len());
for (i, manga) in mangas.iter().take(3).enumerate() {
println!(" {}. {} (ID: {})", i + 1, manga.name, manga.id);
if let Some(russian) = &manga.russian {
println!(" Π ΡΡΡΠΊΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅: {}", russian);
}
if let Some(chapters) = manga.chapters {
println!(" ΠΠ»Π°Π²: {}", chapters);
}
println!();
}
println!("π€ Π’Π΅ΡΡ 3: ΠΠΎΠΈΡΠΊ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ");
println!("Π‘ΡΡΠ°Π½ΠΈΡΠ°: 1, Π»ΠΈΠΌΠΈΡ: 5\n");
let characters = client
.characters(CharacterSearchParams {
page: Some(1),
limit: Some(5),
ids: None,
})
.await?;
println!("ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ: {}\n", characters.len());
for (i, character) in characters.iter().take(3).enumerate() {
println!(" {}. {} (ID: {})", i + 1, character.name, character.id);
if let Some(russian) = &character.russian {
println!(" Π ΡΡΡΠΊΠΎΠ΅ ΠΈΠΌΡ: {}", russian);
}
println!();
}
println!("π Π’Π΅ΡΡ 4: ΠΠΎΠΈΡΠΊ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ ΠΏΠΎ ID");
println!("ID: [1, 2, 3]\n");
let characters_by_ids = client
.characters(CharacterSearchParams {
page: None,
limit: None,
ids: Some(vec!["1".to_string(), "2".to_string(), "3".to_string()]),
})
.await?;
println!("ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ: {}\n", characters_by_ids.len());
for character in &characters_by_ids {
println!(" - {} (ID: {})", character.name, character.id);
}
println!();
println!("π₯ Π’Π΅ΡΡ 5: ΠΠΎΠΈΡΠΊ Π»ΡΠ΄Π΅ΠΉ");
println!("ΠΠΈΠΌΠΈΡ: 3\n");
let people = client
.people(PeopleSearchParams {
limit: Some(3),
search: None,
})
.await?;
println!("ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ Π»ΡΠ΄Π΅ΠΉ: {}\n", people.len());
for (i, person) in people.iter().enumerate() {
println!(" {}. {} (ID: {})", i + 1, person.name, person.id);
if let Some(russian) = &person.russian {
println!(" Π ΡΡΡΠΊΠΎΠ΅ ΠΈΠΌΡ: {}", russian);
}
if let Some(is_seyu) = person.is_seyu
&& is_seyu
{
println!(" Π‘Π΅ΠΉΡ");
}
if let Some(is_mangaka) = person.is_mangaka
&& is_mangaka
{
println!(" ΠΠ°Π½Π³Π°ΠΊΠ°");
}
println!();
}
if let Some(first_anime) = animes.first() {
println!("π Π’Π΅ΡΡ 6: ΠΠ΅ΡΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°Π½ΠΈΠΌΠ΅");
println!("ΠΠ½ΠΈΠΌΠ΅: {}\n", first_anime.name);
if let Some(genres) = &first_anime.genres
&& !genres.is_empty()
{
println!(" ΠΠ°Π½ΡΡ:");
for genre in genres.iter().take(5) {
println!(" - {}", genre.name);
}
println!();
}
if let Some(studios) = &first_anime.studios
&& !studios.is_empty()
{
println!(" Π‘ΡΡΠ΄ΠΈΠΈ:");
for studio in studios.iter() {
println!(" - {}", studio.name);
}
println!();
}
if let Some(aired_on) = &first_anime.aired_on
&& let Some(date) = &aired_on.date
{
println!(" ΠΠ°ΡΠ° Π²ΡΡ
ΠΎΠ΄Π°: {}", date);
}
if let Some(description) = &first_anime.description {
let desc_short = if description.len() > 200 {
&description[..200]
} else {
description
};
println!("\n ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅: {}...", desc_short);
}
}
println!("\nβ
ΠΡΠ΅ ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ!");
Ok(())
}