Обновление с 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.