не типы, а runtime-dependent код. Что-нибудь вроде net, network, rt, runtime, ...?
Константы вроде "https://ddragon.leagueoflegends.com/api/versions.json" лучше выносить в константы (const VERSION_URL_OR_SMT: &str = "...")
Смысл тестов не очень понятен, не вижу чтобы они реально что-то тестировали... Also я бы для них сделал что-то вроде fn run<F: Future>(fut: F) -> F::Output, чтобы с рантаймами так не мучаться.
assert_matches заменяется assert!(matches!(val, pattern), "Some error blah blah assertion failed {:?}", val) вроде
Модуль с тестами всегда называй mod tests так все делают и всем будет проще
В returns_correct_status_codes совмести статус и ошибку, убери переменные, чтобы туда-сюда глазами не бегать.
У DDragonClient не хватает конструктора с возможностью передать клиент похоже
DDragonClient::new такое ощущение что должен вызывать <_>::new_for_lapi
src/ddragon.rs#L72 ты тут форматируешь строку пользовательским вводом а потом парсишь в урл и анврапаешь. Это не очень т.к. пользователь может ввести с ошибкой и всё схлопнется паникой. (и таких мест ещё несколько)
let name = name.to_owned();
format!(..., name);
— не надо так
В LeagueClient::new ключ лучше передавать, а не парсить из env'а
То на что меня хватило /я бы вообще немного другой апи сделал, но это всё мой перфекционизм :')/
Благодарю за развернутый ответ!
Перфекционизм - вообще ужасная штука.
Обсуждают сегодня