Shikicrate
Rust клиент для Shikimori GraphQL API. Потому что парсить JSON руками — это прошлый век.
Что это вообще такое?
Нужен доступ к аниме, манге, персонажам и прочей японской культуре через Shikimori? Не хочешь писать GraphQL запросы вручную? Добро пожаловать. Клиент сам разберется с retry-логикой, rate limiting и прочими радостями жизни.
Установка
Кидай в Cargo.toml:
[]
= "0.1.1"
Или для локальной разработки (если хочешь поковырять код):
[]
= { = "../shikicrate" }
Быстрый старт
use ;
async
Что умеет
Аниме
let params = AnimeSearchParams ;
let animes = client.animes.await?;
Манга
let params = MangaSearchParams ;
let mangas = client.mangas.await?;
Персонажи
Можно искать по странице, можно по ID — как удобнее:
// По странице
let params = CharacterSearchParams ;
let characters = client.characters.await?;
// Или по ID (если знаешь, кого ищешь)
let params = CharacterSearchParams ;
let characters = client.characters.await?;
Люди (режиссеры, сценаристы и прочие)
let params = PeopleSearchParams ;
let people = client.people.await?;
Пользовательские оценки
let params = UserRateSearchParams ;
let user_rates = client.user_rates.await?;
Настройка клиента
Builder (если любишь цепочки методов)
use ShikicrateClientBuilder;
use Duration;
let client = new
.timeout
.base_url
.build?;
Прямое создание (если не любишь)
use ShikicrateClient;
// Дефолтные настройки (30 секунд таймаут)
let client = new?;
// С кастомным таймаутом
let client = with_timeout?;
// С кастомным URL (если у тебя свой инстанс)
let client = with_base_url?;
Обработка ошибок
Клиент сам разбирается с:
- Rate limiting (429): ждет
Retry-Afterи повторяет запрос - Сетевые ошибки: ретраит до 3 раз с экспоненциальной задержкой (1s → 2s → 4s)
- GraphQL ошибки: возвращает все сообщения об ошибках
- Валидация: проверяет параметры до отправки (чтобы не тратить время зря)
use ;
match client.animes.await
Примеры
Запусти пример, чтобы посмотреть, как это работает:
Там показывается:
- Поиск аниме с фильтрами
- Поиск манги
- Поиск персонажей (по странице и по ID)
- Поиск людей
- Вывод детальной информации
Структура проекта
src/client.rs— HTTP клиент, который делает всю грязную работуsrc/error.rs— типы ошибок (чтобы знать, что пошло не так)src/types.rs— типы данных (Anime, Manga, Character, Person и т.д.)src/queries.rs— методы для выполнения запросовanimes,mangas,characters,people,userrates— GraphQL запросы
Тесты
Лицензия
MIT OR Apache-2.0 — используй как хочешь.