Обновление с v0.14 до v1
Это руководство предназначено для помощи в обновлении с версии 0.14 hyper до версии 1.
Возможно, вы искали руководства для v0.14?
Подготовка с помощью бэкпортов и устаревших функций
Перед обновлением вы можете начать подготовку вашей кодовой базы 0.14, включив функции backports и deprecated в hyper в вашем Cargo.toml. Вот так:
[dependencies]
hyper = { version = "0.14", features = ["etc", "backports", "deprecated"] }
Функция backports добавляет несколько новых типов из версии 1.0 в 0.14. Если вы также включите функцию deprecated, это добавит предупреждения об устаревании к любым типам hyper, для которых доступны прямые бэкпорты.
ПРИМЕЧАНИЕ: Это не даст вам предупреждений об изменениях, для которых не удалось предоставить бэкпорты.
Прочтите список изменений (Changelog)
Как общее правило, мы старались отметить каждое возможное критическое изменение в списке изменений. Просмотрите раздел "критические изменения" релизов версии 1.0 (включая RC 1-4), где будут предложения по преодолению каждого из них.
Body
Тип Body изменился и стал трейтом (то, что раньше было HttpBody).
Body из версии 0.14 мог иметь несколько вариантов, а в v1 они были разделены на отдельные типы. Вам будет полезно проанализировать каждое место, где вы используете hyper::Body, чтобы решить, на какое решение перейти.
- В общем случае, если вам не нужен конкретный вариант, рассмотрите возможность сделать ваше использование обобщенным, принимая
impl Body(илиwhere B: Body). - Если вы хотите тип, который может быть любым вариантом, вы можете использовать
BoxBody. - В противном случае более конкретные варианты позволяют создать более явный API в вашем коде.
Client
Клиент высокого уровня с пулом соединений Client был удален из hyper 1.0. Похожий тип был добавлен в hyper-util, называемый client::legacy::Client. В основном это прямая замена.
Server
Сервер hyper::Server из v0.14 не имеет прямой замены, поскольку у него были проблемы.
Для типа сервера, который может обрабатывать как HTTP/1, так и HTTP/2 одновременно, используйте server::conn::auto::Builder из hyper-util.
Серверный акцептор прослушивания можно заменить простым циклом.
Service/service_fn
Ранее hyper зависел от tower для трейта Service. Поскольку tower еще не достиг версии 1.0, hyper не мог публично зависеть от него. Поэтому его трейт Service и вспомогательная функция service_fn определены в hyper::service. Подробнее см. в middleware.