1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Rocket-rs

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CHANGELOG.md 180 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 00:28 2ac7d5d

Версия 0.5.1 (22 мая 2024)

Эта версия включает следующие обновления пакетов:

  • rocket 0.5.1
  • rocket_db_pools 0.2.0
  • rocket_dyn_templates 0.2.0
  • rocket_ws 0.1.1

rocket 0.5.1

  • Следующие типы char и std::ops::Range теперь реализуют FromForm:

    • char
    • Range<T: FromForm> с полями start и end
    • RangeFrom<T: FromForm> с полем start
    • RangeTo<T: FromForm> с полем end
    • RangeToInclusive<T: FromForm> с полем end
  • [T; N], Vec<T> и [u8] теперь могут передаваться в uri!.

  • Гайд теперь включает раздел развертывание.

  • Реализация FromForm теперь правильно записывает ошибки, связанные с целыми формами.

  • Реализация FromForm может использоваться в коде, выданном макросами macro_rules!.

  • (фикс #2668 через 52de9a) TempFile теперь гарантирует его очистку перед сохранением.

rocket_db_pools 0.2.0

  • Расширения SQLite теперь поддерживаются в sqlx_sqlite.

    Используйте опцию конфигурации базы данных extensions для указания расширений:

    [default.databases.db_name]
    url = "db.sqlite"
    # Эта опция поддерживается только драйвером `sqlx_sqlite`.
    extensions = ["memvfs", "rot13"]
  • (разрыв) deadpool был обновлен до 0.13.

  • (разрыв) Структура Config имеет новое поле extensions.

rocket_dyn_templates 0.2.0

  • Поддержка шаблонов minijinja 2.0 была введена.

    Шаблоны с расширением .j2 признаются и отображаются с помощью Minijinja. * (разрыв) handlebars был обновлен до 5.1.

rocket_ws 0.1.1

  • Введен метод [WebSocket::accept_key()].

  • tungstenite был обновлен до 0.21.

Общие изменения

  • rust-version для всех пакетов был обновлен до 1.64.

    Это отражает правильный MSRV, необходимый для сборки rocket 0.5.0.

  • Файлы лицензий теперь присутствуют во всех опубликованных пакетах.

Версия 0.5.0 (17 ноября 2023)

Основные возможности и улучшенияВ этом выпуске представлены следующие основные возможности и улучшения:

  • Поддержка [скомпилированной версии на канале выпусков Rust Stable].
  • Переписанный полностью асинхронный ядро с поддержкой async/await.
  • Поддержка WebSockets через [rocket_ws].
  • Полностью завершенная поддержка форм включая multipart, коллекции, [внезапную проверку данных] и контекст.
  • [Sentinels]: автоматическая проверка состояния приложения при запуске для предотвращения ошибок во время выполнения.
  • Грациозное завершение работы с конфигурируемым сигналом, временем грейса, [уведомлением] и [шлюзами завершения работы].
  • Весьма новый, гибкий и надежный система конфигурации на основе Figment.
  • Типизированные [асинхронные потоки данных] и [Server-Sent Events] с использованием синтаксиса генератора.
  • Поддержка асинхронного пулинга баз данных через [rocket_db_pools].
  • Поддержка [двустороннего TLS] и клиентских [сертификатов].
  • Автоматическая поддержка HTTP/2, включая h2 ALPN.
  • Переход json, msgpack и uuid rocket_contrib [функций в основной код].
  • Автоматически активированное [Shield]: безопасные и приватные заголовки для всех ответов.
  • Ограничение входящих данных на уровне типовой системы для защиты от атак типа DoS на основе памяти.
  • Компиляция URI литералов на этапе компиляции с помощью полностью переработанного макроса uri!. * [API для перенаправления соединений запроса] с поддержкой сырого I/O с клиентом.
    • Полная поддержка [UTF-8 символов] в маршрутах и ловушках.
    • Точное обнаружение отсутствующего управляемого состояния, баз данных и шаблонов с помощью [sentinels].
    • Типизированные этапы сборки с жесткими гарантиями уровня приложений.
    • Игнорируемые сегменты: маршрутное совпадение с дикой картой без ограничений по типизации.
    • Первоклассная поддержка serde для встроенных защитников и типов.
    • Новые атрибуты запуска приложения: #[launch] и #[rocket::main].
    • [По умолчанию ловушки] через #[catch(default)], которые обрабатывают любой код состояния.
    • [Область действия ловушек] для уточнения области действия ловушки до префикса URI.
    • Встроенные библиотеки и поддержка [асинхронного тестирования].
    • Объект TempFile для защиты данных и формы для автоматического загрузки в временный файл.
    • Объект [Capped<T>] для защиты данных и формы, который позволяет обнаруживать обрезание из-за ограничений данных.
    • Поддержка динамической и статической приставки и суффиксов URI маршрутов в uri!.
    • Поддержка профиля конфигураций и автоматическое извлечение типизированной конфигурации.
    • Переработанные, нулевые копии, соответствующие RFC анализаторы URI с поддержкой URI-[References].
    • Множественные сегментные параметры (<param...).>`), которые соответствуют нулю сегментам.
    • Макрос [local_cache! ] для хранения данных запроса локально для значений, не имеющих уникального типа.
    • [CookieJar] без ограничений "один за другим".
    • [Синглтон fairings] с заменой и гарантированной уникальностью.
    • Объявление ограничения данных в единицах SI: "2 МиБ", 2. mebibytes().
    • Оптимистичный ответ даже при отсутствии чтения данных или превышении лимитов.
    • Полностью декодированные заимствованные строки как динамические параметры, формы и защита данных.
    • Заимствованные срезы байтов как данные и формы защиты.
    • Быстрое выявление ошибок для [неправильно настроенных секретов], путей обслуживания файлов.
    • Поддержка шаблонов и пользовательских границ шаблонов в #[derive(Responder)].
    • [По умолчанию цвета ранжирования], которые автоматически предотвращают больше коллизий маршрутизации.
    • Улучшенная запись журнала ошибок с предложениями при обнаружении распространённых ошибок.
    • Весьма переработанные примеры, включая новое реальное время [чат] приложение. ## Поддержка стабильной версии RustВ результате поддержки стабильной версии Rust (версия 2021 и далее), необходимость в использовании атрибутов crates #![feature(..)] для Rocket больше не требуется. Полный канонический пример с одним маршрутом hello выглядит следующим образом:
#[macro_use] extern crate rocket;

#[get("/<name>/<age>")]
fn hello(name: &str, age: u8) -> String {
    format!("Привет, {}-летний человек по имени {}!", age, name)
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/hello", routes![hello])
}
Сравните изменения от v0.4 с помощью команды diff.
- #![feature(proc_macro_hygiene, decl_macro)]
-
 #[macro_use] extern crate rocket;

 #[get("/<name>/<age>")]
- fn hello(name: String, age: u8) -> String {
+ fn hello(name: &str, age: u8) -> String {
     format!("Привет, {}-летний человек по имени {}!", age, name)
}

- fn main() {
-     rocket::ignite().mount("/hello", routes![hello]).launch();
- }
+ #[launch]
+ fn rocket() -> _ {
+     rocket::build().mount("/hello", routes![hello])
+ }

Разрушительные изменения

Этот выпуск включает множество разрушительных изменений. Для руководства по миграции из версии v0.4 в версию v0.5 см. [руководство по миграции v0.4 до v0.5]. Самые значительные изменения приведены ниже.

Незаметные измененияЭти изменения невидимы компилятору и не вызывают ошибок или предупреждений во время компиляции. Мы строго рекомендуем всем авторам приложений внимательно просмотреть этот список.

  • Блокирующее ввод-вывод (долгие вычисления, синхронные вызовы sleep(), Mutex, RwLock и т. д.) может препятствовать работе сервера и следует избегать, заменив его асинхронной версией или выполняя в рабочем потоке. Это следствие кооперативного многозадачивания async в Rust. Подробнее см. новую раздел руководства.
  • Переменная окружения ROCKET_ENV теперь называется ROCKET_PROFILE. При запуске приложения выводится предупреждение, если используется старое имя.
  • По умолчанию профиль отладочных сборок теперь — debug, а не dev.
  • По умолчанию профиль выпускаемых сборок теперь — release, а не prod.
  • Переменная окружения ROCKET_LOG теперь называется ROCKET_LOG_LEVEL. При запуске приложения выводится предупреждение, если используется старое имя.
  • Переменная окружения ROCKET_ADDRESS принимает только IP-адреса, больше не разрешает доменные имена типа localhost.
  • Переменная окружения ROCKET_CLI_COLORS принимает булевые значения true, false вместо строковых значений "on", "off".
  • Временная ошибка при запуске возникает, если в профилях, отличных от debug, включены секреты без настройки ключа secret_key.
  • Некорректно настроенный путь к шаблонам (template_dir) приводит к ошибке при запуске. * Вызов метода [FileServer::new()] немедленно завершается ошибкой, если указанный каталог не существует.
    • Классический конфликт обработчиков ошибок теперь приводит к ошибке при запуске, а не к предупреждению.
    • Теперь дефолтные ранги имеют диапазон от -12 до -1. Изменения обратной совместимости возможны только при использовании маршрутов, созданных автоматически. Маршруты с отрицательными рангами могут столкнуться с конфликтом или будут обрабатываться в другом порядке.
    • Последовательность выполнения проверок пути и запроса относительно друг друга теперь не определена.
    • URI, начинающиеся с :, правильно распознаются как недействительные и отвергаются.
    • Нормализация URI теперь также нормализует часть запроса.
    • Итератор Segments теперь возвращает процент-декодированные &str.
    • Формы теперь парсятся либерально с помощью гварда [Form]. Для прежнего поведения используйте гвард Strict.
    • Гвард формы Option<T> теперь по умолчанию возвращает None, а не значение по умолчанию для T.
    • При превышении данных лимита клиенту возвращается статус 413 Payload Too Large.
    • Дефолтный обработчик ошибок теперь возвращает JSON, если клиент указывает предпочитаемый тип контента через заголовок Accept.
    • Пустые булевые значения форм теперь парсятся как true: строка запроса ? f эквивалентна ? f=true.
    • Объект [Created<R>] больше не отправляет заголовок ETag автоматически, если R: Hash.Для отправки заголовка используйте метод [Created::tagged_body].
  • Теперь FileServer переходит на другое действие, когда файл не найден вместо ошибки 404 Not Found.
  • [Shield] включен по умолчанию. Вам может потребоваться отключить или изменить политики, если ваше приложение зависит от обычно небезопасных браузерных функций или если вы хотите выбрать другие политики, отличные от значений по умолчанию.
  • Вызовы метода get() для объекта [CookieJar] больше не возвращают куки, добавленные во время обработки запроса. Смотрите CookieJar#pending.
  • Реализации Hash для типов данных MediaType и ContentType больше не учитывают параметры типа медиа.
  • При необходимости теперь реализации FromForm для Vec и Map правильно поддерживают ленивую обработку.
  • Для согласования с браузерами символы [ и ] теперь допустимы в путях URI.
  • Символы [ и ] больше не закодированы функцией uri!.
  • Флаг Secure для всех кук, передаваемых через TLS, установлен по умолчанию.
  • Удалённые куки имеют значение SameSite по умолчанию равным Lax.
  • Тип данных [MediaType::JavaScript] теперь имеет значение text/javascript.

Градация вкладаКрейт rocket_contrib устарел, а его функциональность была перемещена в другие крейты rocket.

[Руководство по переходу от устаревшего вклада] предоставляет пошаговое руководство по миграции. Основные изменения следующие:

  • Некоторые возможности, ранее находившиеся в rocket_contrib, были объединены с основным крейтом rocket:
    • json, msgpack и uuid теперь являются [функциями rocket].
    • rocket_contrib::json был перемещён в rocket::serde::json.
    • rocket_contrib::msgpack был перемещён в rocket::serde::msgpack.
    • rocket_contrib::uuid был перемещён в rocket::serde::uuid.
    • rocket_contrib::helmet был перемещён в rocket::shield. [Shield] включен по умолчанию.
    • rocket_contrib::serve был перемещён в rocket::fs, StaticFiles — в [rocket::fs::FileServer].
    • Удалены ненужные обёртки типов данных Uuid и JsonValue.
    • Удалены заголовки в Shield, которые больше не поддерживаются браузерами.
  • Оставшиеся возможности из rocket_contrib предоставляются отдельными крейтами:
    • Вместо rocket_contrib::templates используется [rocket_dyn_templates].
    • Вместо rocket_contrib::databases используются [rocket_sync_db_pools] и [rocket_db_pools].
    • Эти крейты версионируются и выпускаются независимо от rocket.
    • rocket_contrib::databases::DbError стал rocket_sync_db_pools::Error.
    • Удалены интеграции redis, mongodb и mysql, которые имеют аналогичные асинхронные драйверы.
    • Атрибут #[database] генерирует метод [async fn run()] вместо реализации Deref.### Общее

Если у вас есть вопросы или нужна помощь, обратитесь к нашей dokumentacii или свяжитесь с нами по электронной почте info@example.com.

Для установки используйте следующую команду:

pip install package_name

При возникновении ошибки Error 404 проверьте правильность адреса.

Для запуска приложения выполните команду:

python app.py

Если возникают проблемы с подключением к базе данных, убедитесь, что ваш сервер доступен по адресу 192.168.1.1.

Для тестирования используйте следующий скрипт:

pytest -v

Если вы видите сообщение Warning, проверьте конфигурацию вашего проекта.

Для получения более подробной информации о функциях программы прочитайте раздел функциональности.

Если вы столкнулись с проблемой timeout, увеличьте время ожидания запроса до 30 секунд.

Для изменения настроек используйте файл config.ini. Например, чтобы изменить порт, найдите строку "port = 8080" и замените значение 8080 на желаемый номер порта.

Если вы получаете сообщение Connection refused, убедитесь, что ваш сервер работает и доступен по адресу http://localhost:8080.

Для автоматизации процесса сборки используйте скрипт build.sh. Для запуска этого скрипта выполните команду:

./build.sh

Если вы сталкиваетесь с ошибкой Permission denied, убедитесь, что у вас достаточно прав доступа к директории /var/www/html.

Для просмотра логов используйте команду:

tail -f /var/log/app.log

Если вы видите сообщение File not found, проверьте наличие файла по указанному пути.

Для очистки кэша используйте команду:

rm -rf /path/to/cache/*

Если вы столкнулись с проблемой Memory leak, попробуйте использовать профилировщик памяти, такой как Valgrind.

Для анализа производительности используйте инструменты, такие как Profiler.

Если вы видите сообщение Internal server error, проверьте журналы сервера для получения дополнительной информации.

Для восстановления системы используйте скрипт restore.sh. Для запуска этого скрипта выполните команду:

./restore.sh

Если вы столкнулись с проблемой Disk full, освободите место на диске, выполнив команду:

sudo rm -rf /tmp/*

Для мониторинга состояния системы используйте инструменты, такие как Nagios.

Если вы видите сообщение Service unavailable, убедитесь, что все службы работают корректно.

Для управления пользователями используйте команду:

adduser username

Если вы столкнулись с проблемой Access denied, убедитесь, что у вас есть необходимые права доступа.

Для удаления пользователя используйте команду:

deluser username

Если вы видите сообщение Operation timed out, увеличьте время ожидания операции до 60 секунд.

Для перезапуска сервиса используйте команду:

service service_name restart

Если вы столкнулись с проблемой Socket closed, убедитесь, что соединение установлено правильно.

Для просмотра статуса сервиса используйте команду:

service service_name status

Если вы видите сообщение Process terminated, убедитесь, что процесс завершен корректно.

Для просмотра истории команд используйте команду:

history

Если вы столкнулись с проблемой Command not found, убедитесь, что команда установлена и доступна.

Для просмотра текущих настроек используйте команду:

cat config.ini

Если вы видите сообщение Configuration file missing, создайте новый файл конфигурации и добавьте необходимые параметры.

Для просмотра списка всех пользователей используйте команду:

getent passwd | cut -d: -f1

Если вы столкнулись с проблемой User does not exist, убедитесь, что пользователь существует и добавлен в систему.

Для просмотра списка всех групп используйте команду:

getent group | cut -d: -f1

Если вы видите сообщение Group does not exist, убедитесь, что группа существует и добавлена в систему.

Для просмотра списка всех процессов используйте команду:

ps aux

Если вы столкнулись с проблемой No processes running, убедитесь, что все процессы запущены корректно.

Для просмотра списка всех сетевых соединений используйте команду:

netstat -tuln

Если вы видите сообщение No network connections, убедитесь, что все сетевые соединения установлены корректно.

Для просмотра списка всех открытых портов используйте команду:

ss -tnl

Если вы столкнулись с проблемой Port already in use, убедитесь, что порты свободны и не используются другими процессами.

Для просмотра списка всех файловых систем используйте команду:

df -h

Если вы видите сообщение Disk space low, убедитесь, что на диске достаточно места для работы системы.

Для просмотра списка всех устройств используйте команду:

lsblk

Если вы столкнулись с проблемой Device not found, убедитесь, что устройства подключены и доступны.

Для просмотра списка всех модулей ядра используйте команду:

lsmod

Если вы видите сообщение Module not loaded, убедитесь, что модуль ядра загружен и активирован.

Для просмотра списка всех загрузочных записей используйте команду:

ls /boot/

Если вы столкнулись с проблемой Bootloader configuration incorrect, убедитесь, что конфигурация загрузочного меню корректна.

Для просмотра списка всех служб используйте команду:

systemctl list-units --type=service

Если вы видите сообщение Service not active, убедитесь, что служба активна и работает корректно.

Для просмотра списка всех задач используйте команду:

top

Если вы столкнулись с проблемой Task not running, убедитесь, что задача запущена и выполняется корректно.

Для просмотра списка всех событий журнала используйте команду:

journalctl -xe

Если вы видите сообщение Log event not recorded, убедитесь, что события журнала корректно записываются и хранятся.

Для просмотра списка всех ошибок используйте команду:

grep ERROR /var/log/app.log

Если вы столкнулись с проблемой Error not logged, убедитесь, что ошибки корректно регистрируются и записываются в журнал.

Для просмотра списка всех предупреждений используйте команду:

grep WARNING /var/log/app.log

Если вы видите сообщение Warning not recorded, убедитесь, что предупреждения корректно записываются и хранятся в журнале.

Для просмотра списка всех информационных сообщений используйте команду:

grep INFO /var/log/app.log

Если вы столкнулись с проблемой Info message not logged, убедитесь, что информационные сообщения корректно записываются и хранятся в журнале.

Для просмотра списка всех успешных операций используйте команду:

grep SUCCESS /var/log/app.log

Если вы видите сообщение Success message not recorded, убедитесь, что успешные операции корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок использования используйте команду:

grep USAGE_ERROR /var/log/app.log

Если вы столкнулись с проблемой Usage error not logged, убедитесь, что ошибки использования корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок парсера используйте команду:

grep PARSER_ERROR /var/log/app.log

Если вы видите сообщение Parser error not recorded, убедитесь, что ошибки парсера корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок компиляции используйте команду:

grep COMPILE_ERROR /var/log/app.log

Если вы столкнулись с проблемой Compile error not logged, убедитесь, что ошибки компиляции корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок выполнения используйте команду:

grep RUNTIME_ERROR /var/log/app.log

Если вы видите сообщение Runtime error not recorded, убедитесь, что ошибки выполнения корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок сети используйте команду:

grep NETWORK_ERROR /var/log/app.log

Если вы столкнулись с проблемой Network error not logged, убедитесь, что ошибки сети корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок ввода-вывода используйте команду:

grep IO_ERROR /var/log/app.log

Если вы видите сообщение IO error not recorded, убедитесь, что ошибки ввода-вывода корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибок памяти используйте команду:

grep MEMORY_ERROR /var/log/app.log

Если вы столкнулись с проблемой Memory error not logged, убедитесь, что ошибки памяти корректно записываются и хранятся в журнале.

Для просмотра списка всех ошибСледующие разрывы совместимости применяются широко и могут вызвать ошибки компиляции.

  • [Ракета] теперь является универсальным над маркером состояния: - API работают с Rocket<Строительство>, Rocket<Запуск>, Rocket<Орбитальный>, или Rocket<P: Phase> в зависимости от необходимости. - Маркер состояния статически обеспечивает переходы между состояниями в порядке Строительство, Запуск, Орбитальный. - rocket::ignition() теперь это [rocket::build()] и возвращает Rocket<Строительство>. - [Rocket::ignition()] переходит в состояние Запуск. Это происходит автоматически при запуске, если необходимо. - Запуск завершает конфигурацию, выполняет ignition навесы и проверяет [сентинелы]. - [Rocket::launch()] переходит в состояние Орбитальный и начинает сервер. - Методы, такие как [Request::rocket()], которые относятся к живому экземпляру Rocket, возвращают &Rocket<Орбитальный>.
    • [Навесы] были переструктурированы для использования с async:
      • Навесы attach заменены на ignition навесы. В отличие от attach навесов, которые выполнялись сразу после привязки, ignition навесы выполняются при переходе в состояние Запуск.
      • Навесы launch заменены на liftoff навесы. Liftoff навесы всегда выполняются, даже в локальных клиентах, после того как сервер начал прослушивание и известен конкретный порт.
    • Введена новая система [конфигурации], основанная на Figment:
      • Концепция "окружений" заменена на "профили". - ROCKET_ENV заменён на ROCKET_PROFILE.
      • ROCKET_LOG заменён на ROCKET_LOG_LEVEL.
      • Имена профилей могут быть произвольно выбраны. Профили dev, stage и prod не имеют специального значения.
      • Профили debug и release являются стандартными профилями для режимов сборки debug и release.
      • Новый специально распознаваемый профиль default указывает стандартные значения для всех профилей.
      • Профиль global имеет наивысший приоритет, за ним следует выбранный профиль, а затем default.
      • Добавлена поддержка ограничений, указанных в единицах SI: "1 MiB".
      • Переименовано LoggingLevel в [LogLevel].
      • Встроенные варианты ошибок в структуру [Error].
      • Изменён тип workers на usize вместо u16.
      • Изменены допустимые значения для keep_alive: он отключается с 0, а не с false или off.
      • Отключен фичер secrets (для закрытых cookies) по умолчанию.
      • Удалены API, связанные с "extra". Типизированные значения можно извлечь из настроенного Figment.
      • Удалён ConfigBuilder: все поля в структуре [Config] стали публичными с конструкторами для каждого поля.
    • Многие функции, трейты и ограничения трейтов были модифицированы для использования async:
      • [FromRequest], [Fairing], [catcher::Handler], [route::Handler], и [FromData] используют #[async_trait].
      • [NamedFile::open] теперь является асинхронной функцией.
      • Добавлен метод [Request::local_cache_async()] для использования в асинхронных гвардах запросов. - Несобственные (unsized) тела ответов типа Response должны реализовывать интерфейс [AsyncRead] вместо Read.
      • Автоматически собственные (sized) тела ответов типа Response должны реализовывать интерфейс [AsyncSeek] вместо Seek.
      • Модуль local разделён на два: [rocket::local::asynchronous] и [rocket::local::blocking].
    • Функционал и возможности, требующие nightly версию Rust, были удалены:
      • Удалена реализация Try для [Outcome], которая позволяла использовать оператор ? с объектами типа Outcome. Рекомендованной заменой являются макрос rocket::outcome::try_outcome! и различные комбинаторные функции для Outcome.
      • Реализация Responder для типа данных Result<T, E> доступна только если оба T и E реализуют Responder. Новый тип отклика Debug заменил Result<T: Responder, E: Debug>.
      • API, использующие тип !, теперь используют тип [std::convert::Infallible].
    • [IntoOutcome] был переработан для замены методов, удалённых в Outcome.
      • Метод IntoOutcome::into_outcome() теперь называется or_error().
      • Интерфейс IntoOutcome реализуется для всех псевдонимов типа Outcome.
      • Метод Outcome::forward() требует указания статусного кода.
      • Методы Outcome::from() и Outcome::from_or_forward() были удалены.
    • Метод [Rocket::register()] теперь принимает базовый путь для области действия catcher'ов как первый аргумент.
    • Класс ошибки ErrorKind::Collision переименован в ErrorKind::Collisions.
    • Конфигурационные значения TLS доступны только при активированном фиче tls. * Методы [MediaType::with_params()] и [ContentType::with_params()] теперь являются конструкторами.
    • Имена типов ответов Content-Type теперь имеют префикс Raw.
    • Ответ content::Plain теперь называется content::RawText.
    • Ответ content::Custom<T> был удален в пользу пары значений [(ContentType, T)].
    • Метод CookieJar::get_private_pending() был удален в пользу метода CookieJar::get_pending().
    • Макрос local_cache! принимает меньше типов. Вместо него следует использовать макрос local_cache_once!.
    • Метод Rocket::launch() позволяет восстановлению Rocket после завершения работы, возвращая экземпляр после остановки.
    • ErrorKind::Runtime был удален; добавлено значение [ErrorKind::Shutdown].
    • Outcome::Failure было переименовано в [Outcome::Error].

Маршрутизация и URI * В #[route(GET, path = ". . . ")] путь теперь называется uri: #[route(GET, uri = ". . . ")].

  • Множественные сегменты путей (/<p...>) теперь совпадают с нулём или более сегментами.
  • Улучшения генерации кода исключают маршруты и модули с одинаковым именем в одном пространстве имён.
  • URI маршрута типа (/<a>/<p...>) теперь конфликтует с (/<a>), требует указания rank для разрешения.
  • Все типы и трейты связанные с ловушками перемещены в [rocket::catcher].
  • Все типы и трейты связанные с маршрутами перемещены в [rocket::route].
  • Типы и трейты форматирования URI перемещены в [rocket::http::uri::fmt].
  • T больше не преобразуется в Option<T> или Result<T, _> для параметров запроса в uri!.
  • Для опциональных параметров запроса, uri! требует использования обёрнутого значения или _.
  • &RawStr больше не реализует FromParam: используйте &str вместо.
  • Процессинг процентного декодирования выполняется до вызова реализаций FromParam.
  • RawStr::url_decode() и RawStr::url_decode_lossy() выделяют память при необходимости, возвращают Cow.
  • RawStr::from_str() заменено на RawStr::new().
  • Origin::segments() заменено на Origin.path().segments().
  • Origin::path() и Origin::query() теперь возвращают &RawStr вместо &str.
  • Тип поля Route::name теперь Option<Cow<'static, str>>>.
  • Route::set_uri заменено на метод [Route::map_base()].
  • Поле Route::uri теперь имеет тип [RouteUri].
  • Route::base удалено в пользу Route.uri().base().
  • [Результаты маршрута Forward] теперь ассоциированы со статусом. * Коды состояний использовались при работе встроенных защитников, когда они передают управление:
    • Ошибки параметра маршрута FromParam теперь передаются как 422.
    • Ошибки параметров запроса теперь передаются как 422.
    • Некорректные ошибки типа содержимого формы передаются как 413.
    • &Host, &Accept, &ContentType, IpAddr и SocketAddr все передаются с кодом состояния 500.### Данные и формы
  • Теперь тип данных Data имеет параметризованный срок службы: Data<'r>.
  • Метод [Data::open()] теперь обязательно требует указания лимита данных.
  • Удалён тип FromDataSimple. Вместо него используйте [FromData] и [local_cache!] или [local_cache_once!].
  • Все API типа [DataStream] теперь требуют указания лимитов и возвращают типы [Capped<T>].
  • Типы форм и трейты были перемещены из rocket::request в [rocket::form].
  • Удалён тип FromQuery. Динамические параметры запроса (#[get("/?<param>")]) теперь используются с помощью [FromForm].
  • Заменён тип FromFormValue на [FromFormField]. Все T: FromFormField реализуют FromForm.
  • Значения полей формы декодируются в процентах перед вызовом реализаций метода [FromFormField].
  • Переименован атрибут #[form(field = ...)] в #[field(name = ...)].
  • Пользовательские ошибки форм теперь должны указывать связанный статус Status.

Защитники запросов * Переименовано Cookies в [CookieJar]. Его методы принимают &self.

  • Переименовано Flash.name в Flash.kind, Flash.msg в Flash.message.

  • Заменено Request::get_param() на Request::param().

  • Заменено Request::get_segments() на Request::segments().

  • Заменено Request::get_query_value() на Request::query_value().

  • Заменено Segments::into_path_buf() на Segments::to_path_buf().

  • Заменены Segments и QuerySegments на [Segments<Path> и Segments<Query>].

  • Конструкторы типа [Flash] теперь принимают Into<String> вместо AsRef<str>.

  • Тип защищенного состояния State<'_, T> теперь &State<T>.

  • Удалён жизненный цикл из типа [FromRequest]: FromRequest<'r>.

  • Удалён жизненный цикл из типа [FlashMessage]: FlashMessage<'_>.

  • Удалены все переэкспорты типа State, кроме [rocket::State].### Ответчики

  • Перемещено NamedFile в rocket::fs::NamedFile

  • Заменено Content на content::Custom

  • Методы Response::body и Response::body_mut теперь независимы от ошибок

  • Переименовано ResponseBuilder в Builder

  • Удалены прямые методы чтения тела ответа. Используйте методы на r.body_mut() вместо этого

  • Удалены неточные типы и варианты "разделенного тела"

  • Удалена реализация Responder для Response. Предпочтите специализированные ответчики с помощью #[derive(Responder)]

  • Удалён неиспользуемый фразовый статус из Status

  • Типы ответчиков в [response::status] были унифицированы до формы Status<R>(R)

Общие улучшения

Кроме новых возможностей и изменений, Rocket получил следующие улучшения:### Общее

  • Добавлена поддержка сырых идентификаторов в derive FromForm, макросах #[route] и uri!.
  • Добавлена поддержка некапсульных полей формы: #[field(name = uncased(...))].
  • Добавлена поддержка значений полей формы по умолчанию: #[field(default = expr())].
  • Добавлена поддержка нескольких атрибутов #[field] на полях структур.
  • Добавлена поддержка базовой шестнадцатеричной (также известной как шестнадцатеричной) закодированной секретных ключей.
  • Добавлен метод Config::ident для конфигурирования или удаления глобального заголовка Server.
  • Добавлены методы [Rocket::figment()] и [Rocket::catchers()].
  • Добавлены методы LocalRequest::json() и LocalResponse::json().
  • Добавлены методы LocalRequest::msgpack() и LocalResponse::msgpack().
  • Добавлена поддержка use m::route; routes![route] вместо необходимости использовать routes![m::route].
  • Добавлена поддержка иерархических ограничений данных: ограничение a/b/c падает до a/b, затем до a.
  • Добавлен метод [LocalRequest::inner_mut()]. Объект LocalRequest реализует DerefMut для Request.
  • Добавлена поддержка ключей TLS с использованием ECDSA и EdDSA.
  • Добавлены связанные константы в Config для всех имён параметров конфигурации.
  • Добавлен тип ErrorKind::Config, представляющий ошибки конфигурации во время выполнения.
  • Добавлен псевдоним типа rocket::fairing::Result, возвращаемый методом Fairing::on_ignite().
  • Все неудачи защитников теперь регистрируются во время выполнения. * Метод Rocket::mount() теперь принимает базовое значение любого типа, который реализует TryInto<Origin<'_>>.
    • По умолчанию HTML-контент ошибочной ловушки был сжат.
    • Ошибочная ловушка теперь возвращает JSON, если это запрошено клиентом.
    • Исключения в маршрутах или ловушках перехватываются и передаются в ловушку ошибки 500.
    • Подробное предупреждение выводится, если маршрут или ловушка вызывают исключение.
    • Эмодзи больше не выводятся на Windows.
    • Исправлено поведение класса ошибок Error: теперь он не вызывает исключение, если уже произошло исключение.
    • Введены новые типы URI Reference и Asterisk.
    • Добавлена поддержка C-подобных перечислений в [UriDisplayQuery].
    • Derive UriDisplayQuery теперь распознаёт атрибут #[field] для переименования полей.
    • Методы-построители объекта Client принимают TryInto<Origin>, что позволяет использовать uri!() напрямую.
    • Объект Rocket теперь помечен как #[must_use].
    • Поддержка протокола HTTP/2 может быть отключена путём отключения стандартной черты приложения http2.
    • Добавлен метод [rocket::execute()] для выполнения будущего launch() Rocket.
    • Добавлен макрос [context!] в библиотеку rocket_dyn_templates для временного контекста шаблонов.
    • Библиотека time экспортируется из корневого модуля.[сырых идентификаторов]: raw_identifiers.md по умолчанию значения полей формы: default_form_field_values.md Config::ident: Config_ident.md [Rocket::figment()]: Rocket_figment.md [Rocket::catchers()]: Rocket_catchers.md LocalRequest::json(): LocalRequest_json.md LocalResponse::json(): LocalResponse_json.md LocalRequest::msgpack(): LocalRequest_msgpack.md LocalResponse::msgpack(): LocalResponse_msgpack.md [UriDisplayQuery]: UriDisplayQuery.md [Reference]: Reference.md [Asterisk]: Asterisk.md [UriDisplayQuery]: UriDisplayQuery.md [rocket::execute()]: rocket_execute.md [context! ]: context_macro.md [rocket_dyn_templates]: rocket_dyn_templates.md [Error]: Error_class.md
  • Теперь FromForm, Responder и UriDisplay полностью поддерживают шаблоны.
  • Добавлены вспомогательные функции в субмодули serde.
  • Заголовок HSTS preload для [Shield] теперь включает includeSubdomains.
  • Логгирование игнорирует ошибки write!, если stdout пропал, что предотвращает панику.
  • Добавлена функция [Client::terminate()] для выполнения грациозного завершения работы при тестировании.
  • При завершении работы теперь закрывается async runtime, а не процесс.
  • Добавлен макрос [local_cache_once!] для локального хранения данных запроса.
  • Конечные сообщения запуска теперь всегда записываются в журнал, независимо от профиля.
  • Только те функции, которые возвращают Rocket<Build>, теперь помечаются как #[must_use], а не все Rocket<P>.
  • Устранены несоответствия имен полей формы в ошибках при определённых условиях в [FromForm] derive.
  • Теперь derive FromForm собирает все возникающие ошибки.
  • Базы данных в [rocket_sync_db_pools] теперь грациозно завершаются работу. * Добавлена функция [Metadata::render()] в [rocket_dyn_templates] для прямого рендера шаблонов.
    • Rocket собирает больше информации из некорректных запросов для ловушек ошибок.
    • Возможность использования безопасной функции cookie теперь правильно условно активируется.
    • Данные до границ упаковки в ключах TLS допустимы и игнорируются.
    • Поддержка ключей TLS в формате SEC1 была добавлена.
    • Rocket теперь предупреждает, когда известный секретный ключ настроен.
    • Паника, которая могла произойти при завершении работы в rocket_sync_db_pools, была исправлена.
    • Добавлен параметр конфигурирования [max_blocking] для управления количеством блокирующих потоков.
    • Добавлен параметр конфигурирования [ip_header] "real IP".
    • Метод [pool()] был добавлен модулем [rocket_sync_db_pools] для автоматически создаваемых пулов.
    • Защитники данных теперь могут быть использованы как [sentinels].
    • Исходные двоичные данные поля формы можно получить с помощью защитника формы &[u8].
    • Добавлена функция [TempFile::open()] для потока данных TempFile.
    • Сертификаты mTLS можно установить для локальных запросов с помощью метода [LocalRequest::identity()].
    • Добавлена функция [Error::pretty_print()] для красивого вывода ошибок, аналогично Rocket.
    • Предупреждения регистрируются, когда достигаются ограничения данных.
    • Предупреждение выдается, когда используется String как параметр маршрута. * Информация о происхождении конфигурации регистрируется в журнал уровне debug.
    • Журнал Outcome теперь включает соответствующий код состояния.
    • В кодогене используется Span::mixed_site(), чтобы уменьшить случайные предупреждения clippy. ### HTTP * Добавлена поддержка HTTP/2, включенная по умолчанию через фичу http2 пакета.
    • Добавлен конструктор const для MediaType.
    • Введены типы данных RawStrBuf — владеющий RawStr.
    • Добавлены новые методы "шаблонов" к RawStr.
    • Добавлены методы RawStr::percent_encode() и RawStr::strip().
    • Добавлена поддержка незакодированных символов запроса в URI, часто отправляемых браузерами.
    • Введены защитники запросов типа Host и &Host.
    • Добавлен метод RawStr::percent_encode_bytes().
    • Теперь NODELAY включен по умолчанию для всех соединений.
    • Реализация TLS теперь управляет рукопожатиями с основной задачи, что повышает устойчивость к атакам типа DoS.

Знаменитые медиа-типы

  • Добавлен AVIF: image/avif.

  • Добавлен EventStream: text/event-stream.

  • Добавлен Markdown: text/markdown.

  • Добавлен MP3: audio/mpeg.

  • Добавлен CBZ: application/vnd.comicbook+zip, расширение файла .cbz.

  • Добавлен CBR: application/vnd.comicbook-rar, расширение файла .cbr.

  • Добавлен RAR: application/vnd.rar, расширение файла .rar.

  • Добавлен EPUB: application/epub+zip, расширение файла .epub.

  • Добавлен OPF: application/oebps-package+xml, расширение файла .opf.

  • Добавлен XHTML: application/xhtml+xml, расширение файла .xhtml.

  • Добавлен Text как псевдоним для медиа-типа Plain.

  • Добавлен Bytes как псевдоним для медиа-типа Binary.

  • Добавлен .mjs как известное расширение для JavaScript.

  • Добавлены расширения .exe, .iso, .dmg.### Запрос

  • Добавлена поддержка всех символов UTF-8 в путях маршрутов.

  • Добавлена поддержка закодированного %3A в значениях адресов сокетов или IP в FromFormValue.

  • Добавлен метод Request::rocket() для доступа к активному экземпляру Rocket.

  • Теперь Request::uri() возвращает &Origin<'r> вместо &Origin<'_> .

  • Методы Request::accept(), Request::content_type() отражают изменения в Accept, Content-Type.

  • Json<T>, MsgPack<T> принимают T: Deserialize, а не только T: DeserializeOwned.

  • Подключения SQLite в rocket_sync_db_pools используют лучшие по умолчанию параметры.

  • По умолчанию количество рабочих потоков для синхронных пулов баз данных составляет workers * 4.

  • Добавлен метод Request::host() для получения запрошенного хоста клиентом.

  • Добавлен метод [Template::try_custom()] для гибкой кастомизации движка шаблонов.

  • Ручные регистрации шаблонов теперь могут быть отрендерены с помощью Template::render().

  • Добавлена поддержка заголовка X-DNS-Prefetch-Control в Shield.

  • Добавлена поддержка вручную задаваемых значений expires для приватных cookies.

  • Добавлена поддержка типовых generics и пользовательских ограничений generics к #[derive(Responder)].

  • Заголовок Server устанавливается только если он ещё не был установлен.

  • Точные заголовки Content-Length отправляются даже для частично прочтённых Body.

  • [Redirect] теперь принимает TryFrom<Reference>, что позволяет использовать фрагменты.

Реализация трейтов * Реализован трейт Clone для State.

  • Реализованы трейты Copy и Clone для fairing::Info.
  • Реализован трейт Debug для Rocket и Client.
  • Реализован трейт Default для Status (возвращает Status::Ok).
  • Реализованы трейты PartialEq, Eq, Hash, PartialOrd и Ord для Status.
  • Реализованы трейты Eq, Hash и PartialEq<&str> для Origin.
  • Реализован трейт PartialEq<Cow<'_, RawStr>>> для RawStr.
  • Реализован трейт std::error::Error для Error.
  • Реализованы трейты Deref и DerefMut для LocalRequestRequest).
  • Реализован трейт DerefMut для Form, LenientForm.
  • Реализован трейт From<T> для Json<T>, MsgPack<T>.
  • Реализованы трейты TryFrom<String> и TryFrom<&str> для Origin.
  • Реализован трейт TryFrom<Uri> для каждого из конкретных вариантов URI.
  • Реализован трейт FromRequest для &Config.
  • Реализован трейт FromRequest для IpAddr.
  • Реализован трейт FromParam для PathBuf.
  • Реализованы трейты FromParam, FromData и FromForm для &str.
  • Реализован трейт FromForm для Json<T>, MsgPack<T>.
  • Реализован трейт FromFormField для Cow и Capped<Cow>>.
  • Реализован трейт Responder для tokio::fs::File.
  • Реализован трейт Responder для (ContentType, R), где R: Responder.
  • Реализован трейт Responder для (Status, R), где R: Responder, что переопределяет статус R.
  • Реализован трейт Responder для std::io::Error (поведение аналогично Debug<std::io::Error>).
  • Реализован трейт Responder для Either<T, E>, эквивалентно Result<T, E>.
  • Реализован трейт Serialize для Flash.
  • Реализованы трейты Serialize, Deserialize, UriDisplay и FromUriParam для uuid::Uuid.
  • Реализованы трейты Serialize и Deserialize для RawStr. * Реализованы трейты Serialize и Deserialize для всех типов URI.
  • Реализован трейт Responder для Arc<T>, Box<T>, где T: Responder.
  • Реализованы трейты Serialize и Deserialize для [Method].
  • Реализован трейт Eq для [MediaType] и [ContentType].
  • Реализован трейт Responder для Box<T: Responder + Sized>.
  • Реализован трейт FromForm для Arc<T>.
  • Реализован трейт Fairing для Arc<dyn Fairing>.
  • Реализованы трейты Serialize и Deserialize для Status.### Изменения зависимостей
  • Библиотека serde была введена (1.0).
  • Библиотека futures была введена (0.3).
  • Библиотека binascii была введена (0.1).
  • Библиотека ref-cast была введена (1.0).
  • Библиотека atomic была введена (0.5).
  • Библиотека parking_lot была введена (0.11).
  • Библиотека ubyte была введена (0.10).
  • Библиотека figment была введена (0.10).
  • Библиотека rand была введена (0.8).
  • Библиотека either была введена (1.0).
  • Библиотека pin-project-lite была введена (0.2).
  • Библиотека indexmap была введена (2.0).
  • Библиотека tempfile была введена (3.0).
  • Библиотека async-trait была введена (0.1).
  • Библиотека async-stream была введена (0.3).
  • Библиотека multer была введена (2.0).
  • Библиотека tokio была введена (1.6.1).
  • Библиотека tokio-util была введена (0.6).
  • Библиотека tokio-stream была введена (0.1.6).
  • Библиотека bytes была введена (1.0).
  • Библиотека normpath была введена (1).
  • Библиотека state была обновлена до версии 0.6.
  • Библиотека rmp-serde была обновлена до версии 0.15.
  • Библиотека uuid была обновлена до версии 0.8.
  • Библиотека tera была обновлена до версии 1.10.
  • Библиотека postgres была обновлена до версии 0.19.
  • Библиотека rusqlite была обновлена до версии 0.25.
  • Библиотека r2d2_sqlite была обновлена до версии 0.18.
  • Библиотека time была обновлена до версии 0.3.
  • Библиотека handlebars была обновлена до версии 4.0.
  • Библиотека memcache была обновлена до версии 0.16. * Библиотека rustls была обновлена до версии 0.21.
    • Библиотeka tokio-rustls была обновлена до версии 0.24.
    • Библиотека syn была обновлена до версии 2.
    • Библиотека diesel была обновлена до версии 2.0.
    • Библиотека sqlx была обновлена до версии 0.7.
    • Библиотека notify была обновлена до версии 6.
    • Библиотека criterion была обновлена до версии 0.4.
    • Библиотека cookie была обновлена до версии 0.18.
    • Библиотека yansi была обновлена до версии 1.0.
    • Библиотека atty была удалена. ## ИнфраструктураВ проект были внесены следующие изменения в его инфраструктуру: * Теперь Rocket использует редакцию 2021 года Rust.
    • Добавлен миграционный гайд с версии v0. 4 до v0. 5 и раздел FAQ на сайте Rocket.
    • В примерах руководства теперь видны явные use-инструкции.
    • Примеры разделены на отдельное пространство для тестирования для удобства.
    • Обновлена документация для всех изменений.
    • Устранено множество опечаток, ошибок и сломанных ссылок во всей документации и примерах.
    • Улучшена общая надёжность макросов и качество частота сообщений об ошибках.
    • Бенчмарки теперь используют criterion и наборы данных, выделенные из реальных проектов.
    • Исправлены SPDX-выражения лицензий в файлах Cargo.toml.
    • Добавлена поддержка флага + (например, +stable) в скрипте test.sh для передачи cargo.
    • Добавлена поддержка дополнительных флагов для передачи cargo в скрипте test.sh.
    • Теперь CI позволяет UI-тестам провалиться, чтобы избежать ложноположительных результатов.
    • GitHub CI-поток был обновлён для использования поддерживаемых действий.
    • CI теперь освобождает место на диске перед продолжением работы, чтобы избежать ошибок "out of disk".
    • Все пространства теперь используют resolver = 2.

[Предопределенные значения]: https://api.rocket.rs/v0.5/rocket/trait.Sentinel.html[`local_cache! ]: https://api.rocket.rs/v0.5/rocket/request/macro.local_cache.html [local_cache_once! ]: https://api.rocket.rs/v0.5/rocket/request/macro.local_cache_once.html [CookieJar]: https://api.rocket.rs/v0.5/rocket/http/struct.CookieJar.html [асинхронные потоки]: https://rocket.rs/v0.5/guide/responses/#async-streams [Server-Sent Events]: https://api.rocket.rs/v0.5/rocket/response/stream/struct.EventStream.html [fs::relative! ]: https://api.rocket.rs/v0.5/rocket/fs/macro.relative.html [уведомление]: https://api.rocket.rs/v0.5/rocket/structure.Shutdown.html [Rocket]: https://api.rocket.rs/v0.5/rocket/struct.Rocket.html [rocket::build()]: https://api.rocket.rs/v0.5/rocket/struct.Rocket.html#method.build [Rocket::ignite()]: https://api.rocket.rs/v0.5/rocket/struct.Rocket.html#method.ignite [Rocket::launch()]: https://api.rocket.rs/v0.5/rocket/struct.Rocket.html#method.launch [Request::rocket()]: https://api.rocket.rs/v0.5/rocket/request/struct.Request.html#method.rocket [Fairings]: https://rocket.rs/v0.5/guide/fairings/ [configuration system]: https://rocket.rs/v0.5/guide/configuration/ [Poolable]: https://api.rocket.rs/v0.5/rocket_sync_db_pools/trait.Poolable.html [Config]: https://api.rocket.rs/v0.5/rocket/struct.Config.html [Error]: https://api.rocket.rs/v0.5/rocket/struct.Error.html [LogLevel]: https://api.rocket.rs/v0.5/rocket/config/enum.LogLevel.html [Rocket::register()]: https://api.rocket.rs/v0.5/rocket/struct.Rocket.html#method.register [NamedFile::open]: https://api.rocket.rs/v0.5/rocket/fs/struct.NamedFile.html#method.open [Request::local_cache_async()]: https://api.rocket.rs/v0.5/rocket/request/struct.Request.html#method.local_cache_async [FromRequest]: https://api.rocket.rs/v0.5/rocket/request/trait.FromRequest.html [Fairing]: https://api.rocket.rs/v0.5/rocket/fairing/trait.Fairing.html [catcher::Handler]: https://api.rocket.rs/v0.5/rocket/catcher/trait.Handler.html [route::Handler]: https://api.rocket.rs/v0.5/rocket/route/trait.Handler.html [FromData]: https://api.rocket.rs/v0.5/rocket/data/trait.FromData.html [AsyncRead]: https://docs.rs/tokio/1/tokio/io/trait.AsyncRead.html [AsyncSeek]: https://docs.rs/tokio/1/tokio/io/trait.AsyncSeek.html[rocket::local::асинхронный]: https://api.rocket.rs/v0.5/rocket/local/asynchronous/index.html [rocket::local::блокирующий]: https://api.rocket.rs/v0.5/rocket/local/blocking/index.html [Outcome]: https://api.rocket.rs/v0.5/rocket/outcome/enum.Outcome.html [rocket::outcome::попробовать_результа!]: https://api.rocket.rs/v0.5/rocket/outcome/macro.try_outcome.html [Result<T, E>реализуетОтветчик]: https://api.rocket.rs/v0.5/rocket/response/trait.Responder.html#provided-implementations [Debug]: https://api.rocket.rs/v0.5/rocket/response/struct.Debug.html [std::convert::Непригодный]: https://doc.rust-lang.org/std/convert/enum.Infallible.html [ErrorKind::Коллизии]: https://api.rocket.rs/v0.5/rocket/error/enum.ErrorKind.html#variant.Collisions [rocket::http::uri::fmt]: https://api.rocket.rs/v0.5/rocket/http/uri/fmt/index.html [Data::открыть()]: https://api.rocket.rs/v0.5/rocket/data/struct.Data.html#method.open [DataStream]: https://api.rocket.rs/v0.5/rocket/data/struct.DataStream.html [rocket::форма]: https://api.rocket.rs/v0.5/rocket/form/index.html [FromFormField]: https://api.rocket.rs/v0.5/rocket/form/trait.FromFormField.html [FromForm]: https://api.rocket.rs/v0.5/rocket/form/trait.FromForm.html [FlashMessage]: https://api.rocket.rs/v0.5/rocket/request/type.FlashMessage.html [Flash]: https://api.rocket.rs/v0.5/rocket/response/struct.Flash.html [rocket::Состояние]: https://api.rocket.rs/v0.5/rocket/struct.State.html [SegmentsиSegments]: https://api.rocket.rs/v0.5/rocket/http/uri/struct.Segments.html [Route::map_base()]: https://api.rocket.rs/v0.5/rocket/route/struct.Route.html#method.map_base [uuid поддержка]: https://api.rocket.rs/v0.5/rocket/serde/uuid/index.html [json]: https://api.rocket.rs/v0.5/rocket/serde/json/index.html [msgpack]: https://api.rocket.rs/v0.5/rocket/serde/msgpack/index.html [rocket::serde::json::json!]: https://api.rocket.rs/v0.5/rocket/serde/json/macro.json.html [rocket::shield::Щит]: https://api.rocket.rs/v0.5/rocket/shield/struct.Shield.html [rocket::fs::Файловый_сервер]: https://api.rocket.rs/v0.5/rocket/fs/struct.FileServer.html [rocket_dyn_templates]: https://api.rocket.rs/v0.5/rocket/dyn/templates/index.htmlrs/v0. 5/rocket_dyn_templates/index.html [rocket_sync_db_pools]: https://api.rocket.rs/v0. 5/rocket_sync_db_pools/index.html [multitasking]: https://rocket.rs/v0. 5/guide/overview/#multitasking [Created]: https://api.rocket.rs/v0. 5/rocket/response/status/struct.Created.html [Created::tagged_body]: https://api.rocket.rs/v0. 5/rocket/response/status/struct.Created.html#method.tagged_body [raw identifiers]: https://doc.rust-lang.org/1.51.0/book/appendix-01-keywords.html#raw-identifiers [Rocket::config()]: https://api.rocket.rs/v0. 5/rocket/struct.Rocket.html#method.config [Rocket::figment()]: https://api.rocket.rs/v0. 5/rocket/struct.Rocket.html#method.figment [Rocket::state()]: https://api.rocket.rs/v0. 5/rocket/struct.Rocket.html#method.state [Rocket::catchers()]: https://api.rocket.rs/v0. 5/rocket/struct.Rocket.html#method.catchers [LocalRequest::inner_mut()]: https://api.rocket.rs/v0. 5/rocket/local/blocking/struct.LocalRequest.html#method.inner_mut [RawStrBuf]: https://api.rocket.rs/v0. 5/rocket/http/struct.RawStrBuf.html [RawStr]: https://api.rocket.rs/v0. 5/rocket/http/struct.RawStr.html [RawStr::percent_encode()]: https://api.rocket.rs/v0. 5/rocket/http/struct.RawStr.html#method.percent_encode [RawStr::percent_encode_bytes()]: https://api.rocket.rs/v0. 5/rocket/http/struct.RawStr.html#method.percent_encode_bytes [RawStr::strip()]: https://api.rocket.rs/v0. 5/rocket/http/struct.RawStr.html#method.strip_prefix [rocket::catcher]: https://api.rocket.rs/v0. 5/rocket/catcher/index.html [rocket::route]: https://api.rocket.rs/v0. 5/rocket/route/index.html [Segments::prefix_of()]: https://api.rocket.rs/v0. 5/rocket/http/uri/struct.Segments.html#method.prefix_of [Template::try_custom()]: https://api.rocket.rs/v0. 5/rocket_dyn_templates/struct.Template.html#method.try_custom [Template::custom]: https://api.rocket.rs/v0. 5/rocket_dyn_templates/struct.Template.html#method.custom [FileServer::new()]: https://api.rocket.rs/v0. 5/rocket/fs/struct.FileServer.html#method.new [content]: https://api.rocket.rs/v0. 5/rocket/response/content/index.html [rocket_db_pools]: https://api.rocket.rs/v0. 5/rocket_db_pools/index.html [mutual TLS]: https://rocket.rs/v0. 5/guide/configuration/#mutual-tls [Certificate]: https://api.rocket.rs/v0. 5/rocket/acme/struct.Certificate.html5/rocket/mtls/struct. Certificate. html [MediaType::with_params()]: https://api. rocket. rs/v0. 5/rocket/http/struct. MediaType. html#method. with_params [ContentType::with_params()]: https://api. rocket. rs/v0. 5/rocket/http/struct. ContentType. html#method. with_params [Host]: https://api. rocket. rs/v0. 5/rocket/http/uri/struct. Host. html [&Host]: https://api. rocket. rs/v0. 5/rocket/http/uri/struct. Host. html [Request::host()]: https://api. rocket. rs/v0. 5/rocket/request/struct. Request. html#method. host [context! ]: https://api. rocket. rs/v0. 5/rocket_dyn_templates/macro. context. html [MediaType]: https://api. rocket. rs/v0. 5/rocket/http/struct. MediaType. html [ContentType]: https://api. rocket. rs/v0. 5/rocket/http/struct. ContentType. html [Method]: https://api. rocket. rs/v0. 5/rocket/http/enum. Method. html [(ContentType, T)]: https://api. rocket. rs/v0. 5/rocket/response/content/index. html#использование [v0. 4 до v0. 5 миграционный гайд]: https://rocket. rs/v0. 5/guide/upgrading/ [гайд по отключению contrib]: https://rocket. rs/v0. 5/guide/upgrading/#отключение-contrib [часто задаваемые вопросы]: https://rocket. rs/v0. 5/guide/faq/ [Rocket::launch()]: https://api. rocket. rs/v0. 5/rocket/struct. Rocket. html#метод. launch [ErrorKind::Shutdown]: https://api. rocket. rs/v0. 5/rocket/error/enum. ErrorKind. html#вариант. Shutdown [шлюзы для завершения работы]: https://api. rocket. rs/v0. 5/rocket/fairing/trait. Fairing. html#завершение_работы [Client::terminate()]: https://api. rocket. rs/v0. 5/rocket/local/blocking/struct. Client. html#метод. terminate [rocket::execute()]: https://api. rocket. rs/v0. 5/rocket/fn. execute. html [CookieJar::get_pending()]: https://api. rocket. rs/v0. 5/rocket/http/struct. CookieJar. html#метод. get_pending [Metadata::render()]: https://api. rocket. rs/v0. 5/rocket_dyn_templates/struct. Metadata. html#метод. render [pool()]: https://api. rocket. rs/v0. 5/rocket_sync_db_pools/example/struct. ExampleDb. html#метод. pool [Request::client_ip()]: https://api. rocket. rs/v0. 5/rocket/request/struct. Request. html#метод. client_ip [max_blocking]: https://api. rocket. rs/v0. 5/rocket/struct. Config. html#поле. max_blocking [ip_header]: https://api. rocket. rs/v0. 5/rocket/struct. Config. htmlhtml#поле. ip_header [LocalRequest::identity()]: https://api. rocket. rs/v0. 5/rocket/local/blocking/struct. LocalRequest. html#метод. identity [TempFile::open()]: https://api. rocket. rs/v0. 5/rocket/fs/enum. TempFile. html#метод. open [Error::pretty_print()]: https://api. rocket. rs/v0. 5/rocket/struct. Error. html#метод. pretty_print [API для перехода соединений]: https://api. rocket. rs/v0. 5/rocket/struct. Response. html#переход [rocket_ws]: https://api. rocket. rs/v0. 5/rocket_ws/ [регистрация]: https://api. rocket. rs/v0. 5/rocket/response/struct. Response. html#метод. add_upgrade [IoHandler]: https://api. rocket. rs/v0. 5/rocket/data/trait. IoHandler. html [response::status]: https://api. rocket. rs/v0. 5/rocket/response/status/index. html [Персонализированные ошибки формы данных]: https://api. rocket. rs/v0. 5/rocket/form/error/enum. ErrorKind. html#вариант. Custom [request::Outcome]: https://api. rocket. rs/v0. 5/rocket/request/type. Outcome. html#вариант. Forward [Результаты маршрута Forward]: https://api. rocket. rs/v0. 5/rocket/request/type. Outcome. html#вариант. Forward [Outcome::Error]: https://api. rocket. rs/v0. 5/rocket/outcome/enum. Outcome. html#вариант. Error [IntoOutcome]: https://api. rocket. rs/v0. 5/rocket/outcome/trait. IntoOutcome. html [MediaType::JavaScript]: https://api. rocket. rs/v0. 5/rocket/http/struct. MediaType. html#ассоциированный-констант. JavaScript [TempFile::open()]: https://api. rocket. rs/v0. 5/rocket/fs/enum. TempFile. html#метод. open [Error::pretty_print()]: https://api. rocket. rs/v0. 5/rocket/struct. Error. html#метод. pretty_print [RouteUri`]: https://api. rocket. rs/v0. 5/rocket/route/struct. RouteUri. html# Версия 0. 4. 10 (21 мая 2021)## Ядро

  • [3276b8] Устранено использование unsafe в Origin::parse_owned(), что исправляет проблему целостности.

Версия 0.4.9 (19 мая 2021)

Ядро

  • [#1645, f2a56f] Исправлен Try impl FromResidual<Result> for Outcome.

Версия 0.4.8 (18 мая 2021)

Ядро

  • [#1548, 93e88b0] Исправлена проблема, препятствующая компиляции под Windows Subsystem for Linux v1.
  • Обновлено выполнение Outcome Try до версии 2 в последнем nightly.
  • Минимально требуемый rustc1.54.0-nightly (2021-05-18).

Внутренние изменения

  • Обновлены зависимости base64 до 0.13.

Версия 0.4.7 (9 февраля 2021)

Ядро

  • [#1534, 2059a6] Исправлена низкоуровневая проблема целостности минимального влияния в uri::Formatter.

Версия 0.4.6 (9 ноября 2020)

Ядро

  • [[86bd7c]] Добавлены значения по умолчанию и настраиваемые временные ограничения чтения и записи: read_timeout и write_timeout.
  • [[c24a96]] Добавлена возможность sse, которая [включает очистку буфера] путём возврата io::ErrorKind::WouldBlock.

Документация

  • Исправлены сломанные ссылки на документацию в contrib.
  • Исправлены версии баз данных в документации contrib.

Внутренние изменения

Версия 0.4.5 (30 мая 2020)

Ядро

  • [#1312, 89150f] Исправлена низкая проблема целостности минимального влияния в LocalRequest::clone().
  • [#1263, 376f74] Исправлена проблема сериализации cookie, приводящая к некорректной дешифрации cookie в некоторых случаях.
  • Удалена зависимость от ring для приватных cookie и тем самым для Rocket по умолчанию.
  • Добавлен метод Origin::map_path() для манипулирования путями Origin.
  • Добавлен метод handler::Outcome::from_or_forward().
  • Добавлен параметр Options::NormalizeDirs для StaticFiles.
  • Улучшена доступность по умолчанию ошибочного HTML.

Документация

  • Исправлены различные опечатки.

Версия 0.4.4 (9 марта 2020)

Ядро

  • Удалено использование неподдерживаемого cfg(debug_assertions) в Cargo.toml, что позволяет выполнять сборку на последних nightly версиях.

Документация

  • Исправлены различные сломанные ссылки.# Версия 0.4.3 (Февраль 29, 2020)

Ядро

  • Добавлен новый откликающийся объект Debug для кода ответа 500.
  • Поддержка специализации для типа Result была отмечена как устаревшая.
  • Исправлена проблема, которая приводила к тому, что cookie не устанавливались при ответах с ошибками.
  • Различные реализации Debug для типов Rocket теперь учитывают варианты форматирования.
  • Добавлены откликающиеся объекты для различных HTTP-кодов состояния: [NoContent], [Unauthorized], [Forbidden], и [Conflict].
  • Реализован метод FromParam для базовых типов NonZero.

Генерация кода

  • Документация для макросов, генерируемых Rocket, скрыта.
  • Генерируемый код работает даже тогда, когда импорты паллеты, такие как Some, Ok, и Err, затенены.
  • Сообщения об ошибках, относящиеся к типам откликающих объектов в маршрутах, теперь корректно указывают на тип.

Документация

  • Все примеры кода в руководстве теперь тестированы и гарантированно компилируются.
  • Всем макросам дана документация в пакете core; rocket_codegen больше не используется.

Инфраструктура * CI был перенесён с Travis на Azure Pipelines; теперь проверяется поддержка Windows.

Кодоген

  • JsonValue теперь реализует FromIterator.
  • Ошибки non_snake_case в генерируемом коде игнорируются.
  • Минимально требуемый rustc1.33.0-nightly (2019-01-03).

Вкладчики

  • Разрешена установка пользовательских рангов для StaticFiles через метод StaticFiles::rank().
  • MsgPack правильно устанавливает тип содержимого MessagePack для ответов.

Документация

  • Исправлены опечатки во всех rustdoc и руководствах.
  • Добавлена документация версий библиотек в базе данных документации вкладчиков.

Инфраструктура

  • Обновлены внутренние зависимости до последних версий.

Версия 0.4.1 (11 мая 2019)

Ядро

  • По умолчанию HTTP-заголовок сервера Rocket больше не переопределяет пользовательски установленный заголовок.
  • Исправлены проблемы кодирования и декодирования некоторых символов URI.

Кодоген

  • Более надёжно производится диагностическая информация компилятора.

Вкладчики

  • Типы пулов баз данных теперь реализуют DerefMut.

  • Добавлена поддержка пулов соединений memcache.

  • Больше не зависит от стандартных фич ядра.## Документация

  • Исправлены многие опечатки во всех rustdoc и руководствах.

  • Добавлена документация по монтированию более одного маршрута одновременно.

Инфраструктура * Тестирование больше не требует "инициализации".

Перепись codegenКрейт rocket_codegen полностью переписан с использованием API процедурных макросов, которые станут стабильными. Мы ожидаем, что ночное разрушение будет значительно снижено, вероятно до нуля. Новый импорт прелюда для приложений Rocket выглядит следующим образом:

- #![feature(plugin)]
- #![plugin(rocket_codegen)]
+ #![feature(proc_macro_hygiene, decl_macro)]

- extern crate rocket;
+ #[macro_use] extern crate rocket;

Крейт rocket_codegen не следует указывать как прямую зависимость. Удалите его из вашего файла Cargo.toml:

[dependencies]
- rocket = "0.3"
+ rocket = "0.4"
- rocket_codegen = "0.3"

Разрушающие изменения

Эта версия включает множество разрушающих изменений. Эти изменения перечислены ниже вместе с краткими заметками о том, как обрабатывать эти изменения в существующих приложениях, когда применимо. * Атрибуты маршрутов и ловушек уважают приватность функций. Чтобы смонтировать маршрут или зарегистрировать ловушку вне модуля, где они объявлены, убедитесь, что функция-обработчик помечена как pub или crate. * Синтаксис обработки запросов был полностью переработан. Параметр запроса <param> теперь представлен как <param>. Рассмотрите возможность использования переработанной [обработки строки запроса]. * Атрибут #[error] и макрос errors! были удалены. Используйте #[catch] и catchers! вместо этого. * Метод Rocket::catch() был переименован в [Rocket::register()]. Измените вызовы формы .catch(errors![...]) на .register(catchers![...]). * Атрибут #[catch] принимает только функции с 0 или 1 аргументом. Убедитесь, что аргумент для ловушки, если он есть, имеет тип &Request. * [json!] возвращает объект типа [JsonValue], больше не требует обёртки. Измените случаи использования Json(json!({...})) на json! и измените соответствующий тип на JsonValue. * Все окружения по умолчанию используют порт 8000. Вручную настройте порт 80 для окружений stage и production для получения прежнего поведения. * Отладочные сборки по умолчанию используют окружение production. Вручную установите окружение на debug с помощью ROCKET_ENV=debug для получения прежнего поведения. * [Form] и [LenientForm] потеряли параметр жизни get(), метод. Измените тип Form<'a, T<'a>> на Form<T> или Form<T<'a>>>. Form<T> и LenientForm<T> теперь реализуют Deref<Target = T>, что позволяет удалить вызовы метода .get(). * [ring] был обновлен до версии 0.13.

Убедитесь, что все транзитивные зависимости к `ring` указывают на версию `0.13`.
  • Тип Uri в основном заменён типом [Origin].

    В общем случае замените тип Uri на Origin. Полевые члены base и uri типа [Route] теперь имеют тип [Origin]. Защитник типа &Uri теперь имеет тип &Origin. Метод [Request::uri()] теперь возвращает объект типа [Origin].

  • Все элементы в модуле [rocket_contrib] находятся за модулями.

    • Json теперь json::Json
    • MsgPack теперь msgpack::MsgPack
    • MsgPackError теперь msgpack::Error
    • Template теперь templates::Template
    • UUID теперь uuid::Uuid
    • Value заменён на json::JsonValue
  • Сертификаты TLS требуют расширения subjectAltName.

    Убедитесь, что ваши сертификаты TLS содержат расширение subjectAltName с значением, установленным на ваш домен.

  • Пути маршрутов, точки монтирования и URI типа LocalRequest строго проверяются.

    Убедитесь, что ваши точки монтирования являются абсолютными путями без параметров, маршруты должны иметь абсолютные пути с правильной синтаксической конструкцией параметров, а пути, передаваемые в LocalRequest, должны быть корректными.

  • Метод [Template::show()] принимает &Rocket, но не принимает root.

    При тестировании используйте метод [client.rocket()], чтобы получить ссылку на экземпляр Rocket. Для отображения шаблонов в маршрутах используйте метод [Template::render()]. * Метод [Request::remote()] возвращает реальный удалённый IP-адрес, не перезаписывая его.

    Чтобы получить IP-адрес из заголовка "X-Real-IP", если он присутствует, используйте методы [Request::real_ip()] или [Request::client_ip()].

  • Вариант Bind был добавлен в тип [LaunchErrorKind].

    Убедитесь, что проверки на LaunchErrorKind учитывают или игнорируют вариант Bind.

  • Куки автоматически отслеживаются и распространяются через объект типа Client.

    Для поведения предыдущих версий создайте объект Client с помощью метода [Client::untracked()].

  • Метод LocalRequest::cloned_dispatch() был удалён.

    Для воспроизведения старого поведения используйте цепочку вызовов .clone().dispatch().

  • Конструкторы типа [Redirect] принимают обобщённый тип T: TryInto<Uri<'static>>>.

    Вызов конструктора Redirect с непостоянной строкой &str вида Redirect::to(string) следует преобразовать в Redirect::to(string.to_string()), выделяя строку на куче перед её передачей конструктору.

  • Реализация [FromData] для [Form] и [LenientForm] теперь возвращает ошибку типа [FormDataError].

    При отсутствии I/O ошибок, строка формы хранится в варианте как &'f str.

  • Добавлен вариант [Missing] к типу ошибки [ConfigError].

    Убедитесь, что проверка на ConfigError включает или игнорирует вариант Missing.

  • Реализация [FromData] для типа данных [Json] теперь возвращает ошибку типа [JsonError]. Предыдущий тип ошибки SerdeError стал вторым членом перечисления JsonError. Разбирайте и деконструируйте этот вариант для получения прежнего поведения.

  • Теперь реализация [FromData] эмулируется через [FromDataSimple].

    Измените реализации FromData на FromDataSimple, но не используйте. Рассмотрите возможность использования [трансформаций], если это может принести пользу вашей реализации.

  • Итератор [FormItems] проходит по значениям типа [FormItem].

    Преобразуйте использование .map(|item| item.key_value()) для восстановления прежнего поведения.

  • Вариант [LaunchErrorKind::Collision] содержит вектор коллизирующих маршрутов.

    Деконструируйте его с помощью LaunchErrorKind::Collision(..), чтобы игнорировать вектор.

  • Методы [Request::get_param()] и [Request::get_segments()] индексируются по сегменту, а не по динамическому параметру.

    Приведите аргумент n в вызовах этих методов соответственно.

  • Атрибуты маршрута на основе метода больше не принимают ключированное значение path.

    Преобразуйте атрибут вида #[get(path = "..")] в #[get("..")].

  • Защитники данных для [Json] и [MsgPack] больше не отвергают запросы с неожиданным типом контента.

    Для приближения к прежнему поведению добавьте параметр маршрута format = "json" при использовании Json, или format = "msgpack" при использовании MsgPack.

  • Реализован интерфейс [Responder для Status]. Удалены Failure, status::NoContent, и status::Reset ответчики. Замените использование Failure(status) на status напрямую. Замените status::NoContent на Status::NoContent. Замените status::Reset на Status::ResetContent. * [Config::root()] возвращает Option<&Path> вместо &Path.

    Для предыдущего поведения используйте config.root().unwrap().

  • [Status::new()] больше не является const.

    Создайте Status напрямую.

  • Конструкторы класса [Config] теперь возвращают Config вместо Result<Config>.

  • Методы ConfigError::BadCWD и Config.config_path были удалены.

  • У класса [Json] больше нет значения по умолчанию для его типового параметра.

  • Использование data на маршрутах методов, не являющихся payload, стало предупреждением вместо ошибки.

  • Метод raw_form_string классов [Form] и [LenientForm] был удален.

  • Несколько невозможных ассоциативных типов Error теперь установлены как !.

  • Все конструкторы класса [AdHoc] требуют имени в качестве первого параметра. * Топовый тип Error был удален. [LaunchErrorKind::Collision]: https://api.rocket.rs/v0.4/rocket/error/enum.LaunchErrorKind.html#variant.Collision [json! ]: https://api.rocket.rs/v0.4/rocket_contrib/macro.json.html [JsonValue]: https://api.rocket.rs/v0.4/rocket_contrib/json/struct.JsonValue.html [Json]: https://api.rocket.rs/v0.4/rocket_contrib/json/struct.Json.html [ring]: https://crates.io/crates/ring [Template::show()]: https://api.rocket.rs/v0.4/rocket_contrib/templates/struct.Template.html#method.show [Template::render()]: https://api.rocket.rs/v0.4/rocket_contrib/templates/struct.Template.html#method.render [client.rocket()]: https://api.rocket.rs/v0.4/rocket/local/struct.Client.html#method.rocket [Request::remote()]: https://api.rocket.rs/v0.4/rocket/struct.Request.html#method.remote [Request::real_ip()]: https://api.rocket.rs/v0.4/rocket/struct.Request.html#method.real_ip [Request::client_ip()]: https://api.rocket.rs/v0.4/rocket/struct.Request.html#method.client_ip [Bind]: https://api.rocket.rs/v0.4/rocket/error/enum.LaunchErrorKind.html#variant.Bind [LaunchErrorKind]: https://api.rocket.rs/v0.4/rocket/error/enum.LaunchErrorKind.html [Client::untracked()]: https://api.rocket.rs/v0.4/rocket/local/struct.Client.html#method.untracked [Uuid]: https://api.rocket.rs/v0.4/rocket_contrib/uuid/struct.Uuid.html [Route]: https://api.rocket.rs/v0.4/rocket/struct.Route.html [Redirect]: https://api.rocket.rs/v0.4/rocket/response/struct.Redirect.html [Request::uri()]: https://api.rocket.rs/v0.4/rocket/struct.Request.html#method.uri [FormDataError]: https://api.rocket.rs/v0.4/rocket/request/enum.FormDataError.html [FromData]: https://api.rocket.rs/v0.4/rocket/data/trait.FromData.html [Form]: https://api.rocket.rs/v0.4/rocket/request/struct.Form.html [LenientForm]: https://api.rocket.rs/v0.4/rocket/request/struct.LenientForm.html [AdHoc]: https://api.rocket.rs/v0.4/rocket/fairing/struct.AdHoc.html [Missing]: https://api.rocket.rs/v0.4/rocket/config/enum.ConfigError.html#variant.Missing [ConfigError]: https://api.rocket.rs/v0.4/rocket/config/enum.ConfigError.html [Rocket::register()]: https://api.rocket.rs/v0.4/rocket/struct.Rocket.html#method.register [JsonError]: https://api.rocket.rs/v0.4/rocket/contrib/json/enum.JsonError.html4/rocket_contrib/json/enum. JsonError. html [transformations]: https://api. rocket. rs/v0. 4/4/rocket/data/from_data. html#transformation [FromDataSimple]: https://api. rocket. rs/v0. 4/rocket/data/trait. FromDataSimple. html [Request::get_param()]: https://api. rocket. rs/v0. 4/rocket/struct. Request. html#method. get_param [Request::get_segments()]: https://api. rocket. rs/v0. 4/rocket/struct. Request. html#method. get_segments [FormItem]: https://api. rocket. rs/v0. 4/rocket/request/struct. FormItem. html [rocket_contrib]: https://api. rocket. rs/v0. 4/rocket_contrib/index. html [MsgPack]: https://api. rocket. rs/v0. 4/rocket_contrib/msgpack/struct. MsgPack. html [Status::new()]: https://api. rocket. rs/v0. 4/rocket/http/struct. Status. html#method. new [Config]: https://api. rocket. rs/v0. 4/rocket/struct. Config. html [Config::root()]: https://api. rocket. rs/v0. 4/rocket/struct. Config. html#method. root

Общие улучшенияКроме новых функций, Rocket получил следующие улучшения:

  • Теперь сообщения журнала ссылаются на маршруты по имени.
  • Ошибки столкновения при запуске указывают на конфликтующие маршруты.
  • Сообщения о неудачах в защите ракет теперь ссылаются на неудачную защиту по имени.
  • По умолчанию дефолтный 403 обработчик теперь ссылается на авторизацию, а не на аутентификацию.
  • Приватные cookie теперь устанавливаются как HttpOnly, и им присваивается срок годности в одну неделю по умолчанию.
  • Добавлен пример использования шаблонов Tera.
  • Все макросы, derive и атрибуты отдельно документированы в rocket_codegen.
  • Недействительные запросы клиентов теперь получают ответ 400 вместо 500.
  • Тела ответов надежно очищаются при запросах метода HEAD.
  • Добавлен дефолтный обработчик для ошибки 504: Gateway Timeout.
  • Информация о конфигурации теперь регистрируется во всех окружениях.
  • Использование unsafe было снижено до двух случаев в основной библиотеке.
  • [FormItems] теперь парсит пустые ключи и значения, а также ключи без значений.
  • Добавлена функция [Config::active()] как сокращение для Config::new(Environment::active()?).
  • Ошибки привязки адреса/порта при запуске теперь обнаруживаются и явно выводятся.
  • [Flash] cookie теперь очищаются только после проверки.
  • Обязательство Sync для [AdHoc::on_attach()], [AdHoc::on_launch()] было удалено.
  • [AdHoc::on_attach()], [AdHoc::on_launch()] принимают FnOnce. * Добавлена функция [Config::root_relative()] для получения путей относительно файла конфигурации.

Версия 0.3.16 (24 августа 2018 года)

Генерация кода

  • Обновлена генерация кода для nightly 2018-08-23.
  • Минимально требуемый rustc1.30.0-nightly 2018-08-23.

Ядро

  • Только закрывается чтение концов соединений. Это позволяет отправлять ответы даже когда клиент передает больше данных, чем ожидалось.

Документация

  • Добавлены детали по получению дополнительной конфигурации для руководства.

Версия 0.3.15 (16 июля 2018 года)

Генерация кода

  • Введены декоратор #[catch] и макрос catchers!, заменившие #[error] и errors!.
  • Декоратор #[error] и макрос errors! были отмечены как устаревшие.
  • Обновлена генерация кода для nightly 2018-07-15.
  • Минимально требуемый rustc1.29.0-nightly 2018-07-15.

Версия 0.3.14 (22 июня 2018 года)

Генерация кода

  • Обновлена генерация кода для nightly 2018-06-22.
  • Минимально требуемый rustc1.28.0-nightly 2018-06-22.

Версия 0.3.13 (16 июня 2018 года)

Генерация кода

  • Обновлено для ночного сбора 2018-06-12.
  • Минимально требуемый rustc1.28.0-nightly 2018-06-12.# Версия 0.3.12 (май 31, 2018)

Codegen

  • Обновлено для ночного сбора 2018-05-30.
  • Минимально требуемый rustc1.28.0-nightly 2018-05-30.

Версия 0.3.11 (май 19, 2018)

Core

  • Обновлено для ночного сбора 2018-05-18.

Инфраструктура

  • Устранена проблема внедрения зависимостей для тестов компиляции с ошибками в_codegen.

Версия 0.3.10 (май 5, 2018)

Core

  • Устранено проблему парсинга вложенных структур TOML в переменных окружения конфига.
  • Уменьшены затраты на получение управляемого состояния до незасинхронизированного поиска в HashMap.

Codegen

  • Обновлено для ночного сбора 2018-05-03.
  • Минимально требуемый rustc1.27.0-nightly 2018-05-04.

Contrib

  • Обновлено для ночного сбора 2018-05-03.

Документация

  • Устранена проблема типа пула баз данных в руководстве по состоянию.

Версия 0.3.9 (апрель 26, 2018)

Core

  • Обновлено для ночного сбора 2018-04-26.
  • Минимально требуемый rustc1.27.0-nightly 2018-04-26.
  • Уменьшены затраты на получение управляемого состояния до незасинхронизированного поиска в HashMap.

Codegen

  • Обновлено для ночного сбора 2018-04-26.
  • Минимально требуемый rustc1.27.0-nightly 2018-04-26.

Contrib

  • Предварительно выделенный буфер размером 512 байт при десериализации JSON улучшает производительность.

Документация

  • Устранены различные опечатки в rustdoc и руководстве.
  • Удалён устаревший раздел справки о производительности в README.

Инфраструктура * Удалены шлюзы для стабилизованных возможностей: iterator_for_each, i128_type, conservative_impl_trait, never_type.

  • Travis теперь выполняет тестирование как в режиме отладки, так и в режиме выпуска.

Версия 0.3.6 (январь 12, 2018)

Ядро

  • Добавлен метод Rocket.state() для получения управляемого состояния из экземпляров Rocket.
  • Вложенные вызовы Rocket.attach() теперь корректно обрабатываются.
  • JSON API (application/vnd.api+json) теперь известен как тип медиа.
  • Незакэшированные маркеры для заголовков Content-Type и Accept правильно сохраняются при использовании Request.clone().
  • Минимально требуемый rustc1.25.0-nightly 2018-01-12.

Генерация кода

  • Обновлена генерация кода для ночного сборки 2017-12-22.
  • Минимально требуемый rustc1.24.0-nightly 2017-12-22.

Документация

  • Устранена опечатка в руководстве по состоянию: simple просто.
  • Пример базы данных и документация были обновлены для Diesel 1.0.

Инфраструктура

  • Скрипты командной строки теперь используют git grep вместо egrep для более быстрого поиска.

Версия 0.3.5 (декабрь 18, 2017)

Генерация кода

  • Обновлена генерация кода для ночного сборки 2017-12-17.
  • Минимально требуемый rustc1.24.0-nightly 2017-12-17.

Версия 0.3.4 (декабрь 14, 2017)

Ядро

  • Реализация Responder для NamedFile теперь использует размерное тело, когда длина файла известна.

  • Используется #[repr(C)] для оберток над str, чтобы гарантировать правильную структуру лайаута на всех платформах.

  • Добавлен status::BadRequest Responder.## Генерация кода

  • Улучшено сообщение об ошибке компиляции для отсутствующего аргумента в обработчике.

  • Обновлена генерация кода для ночного сборки 2017-12-13.

  • Минимально требуемый rustc1.24.0-nightly 2017-12-13.

Документация

  • Теперь html_root_url в rustdoc указывает на правильный адрес.
  • Устранена опечатка в руководстве по fairings: event событий.
  • Устранена опечатка в документации Outcome: users Users.

Версия 0.3.3 (25 сентября 2017)

Ядро

  • Реализация Debug для Config теперь уважает форматирование опций.
  • Cow<str> теперь реализует FromParam.
  • Vec<u8> теперь реализует Responder.
  • Добавлен тип медиа Binary для application/octet-stream.
  • Пустые коллекции fairings больше не регистрируются в журнале.
  • Эмодзи больше не выводятся в нотерминалы.
  • Минимально требуемый rustc1.22.0-nightly 2017-09-13.

Генерация кода

  • Улучшено сообщение об ошибке времени компиляции для отсутствующего аргумента в обработчике.
  • Обновлена генерация кода для ночного сборки 2017-09-25.
  • Минимально требуемый rustc1.22.0-nightly 2017-09-25.

Документация

  • Устранены опечатки на сайте: by быть, Reponder Responder.
  • Настроено отступление в Markdown для совместимости с CommonMark.

Инфраструктура

  • Shell-скрипты обрабатывают пути с пробелами.

Версия 0.3.2 (15 августа 2017)

Ядро

  • Добавлены методы конвертации из и в Box<UncasedStr>.## Генерация кода

  • Предупреждения были удалены из-за нестабильности компилятора. Предупреждения вернутся как отдельный crate rocket_lints.

  • Обновлены предупреждения для ночной сборки 2017-08-10.

  • Минимально требуемый rustc1.21.0-nightly (2017-08-10).

Вклад

  • Ошибки Tera, которые ранее игнорировались внутри, теперь выводятся.

Документация

  • Устранены опечатки во всех документах.

Версия 0.3.1 (11 августа 2017)

Ядро

  • Добавлена поддержка ASCII-цветов на современных консолях Windows.
  • Переименования полей формы могут теперь содержать любые допустимые символы, а не только идентификаторы.

Генерация кода

  • Пропущенные именованные параметры маршрутов теперь разрешены (_ident).
  • Исправлена проблема, при которой некоторые пути приводили к провалу проверки предупреждений assert! (#367).
  • Обновлены предупреждения для ночной сборки 2017-08-10.
  • Минимально требуемый rustc1.21.0-nightly (2017-08-10).

Вклад

  • Ошибки Tera, которые ранее игнорировались внутри, теперь выводятся.

Документация

  • Устранены опечатки во всех документах.

Версия 0.3.0 (14 июля 2017)

Новые возможностиЭта версия включает следующие новые возможности:

  • Введены [оболочки], промежуточное программное обеспечение структуры ракеты.
  • Введена нативная поддержка TLS.
  • Введены приватные cookie.
  • Добавлен тип данных [MsgPack] в модуль [contrib] для простого использования и возврата данных в формате MessagePack.
  • Теперь ошибки запуска ([LaunchError]) от метода [Rocket::launch()] возвращаются для анализа без вызова паники.
  • Маршруты без параметров запроса теперь совпадают с запросами, имеющими или не имеющими параметры запроса.
  • По умолчанию ранжирование маршрутов находится в диапазоне от -4 до -1, предпочитающее статические пути и маршруты с совпадением строки запроса.
  • Добавлена нативная структура заголовка запроса [Accept].
  • Заголовок запроса [Accept] можно получить через метод [Request::accept()].
  • Новые поля формы могут быть переименованы через новый атрибут поля структуры #[form(field = "name")].
  • Все активные маршруты могут быть получены через метод [Rocket::routes()].
  • Добавлен метод [Response::body_string()] для получения содержимого ответа как строки типа String.
  • Добавлен метод [Response::body_bytes()] для получения содержимого ответа как массива байт типа Vec<u8>.
  • Добавлен метод [Response::content_type()] для удобного получения заголовка Content-Type ответа.
  • Ограничения размера входящих данных теперь настраиваемы. * Добавлен метод Request::limits() для получения ограничений входящих данных.
    • Ответчики могут динамически корректировать свой ответ на основе входящего запроса.
    • Добавлен метод Request::guard() для простого получения защитников запроса.
    • Добавлен метод Request::route() для получения активного маршрута, если он существует.
    • Объект &Route теперь является защитником запроса.
    • Базовый путь монтирования маршрута типа Route может быть получен через Route::base или Route::base().
    • Поддержка [private] (авторизованное шифрование) cookie в объекте Cookies, зашифрованных ключом конфигурации secret_key.
    • Добавлены конструкторы Config::{development, staging, production} для объекта Config.
    • Добавлен метод Config::get_datetime() для получения значения extra как объекта типа Datetime.
    • Формы теперь могут быть парсированы мягко с помощью нового объекта данных LenientForm.
    • Оператор ? теперь может использоваться с типом Outcome.
    • Конфигурационные параметры на основе цитируемой строки, массива и таблицы могут быть установлены через переменные окружения.
    • Цветной вывод логов отключен, когда stdout не являетсяTTY.
    • Реализация интерфейса FromForm доступна для типов Option<T: FromForm> и Result<T: FromForm, T::Error>.
    • Добавлен откликающийся [NotFound] для простого 404 ответа.

Критические измененияЭтот выпуск включает множество критических изменений. Эти изменения приведены ниже вместе с краткими заметками о том, как следует обрабатывать эти изменения в существующих приложениях.

  • session_key был переименован в secret_key, теперь требуется ключ длиной 256 бит в базовой шестнадцатеричной кодировке Base64
    Вряд ли что-то использовало ранее session_key. Если это было так, переименуйте session_key в secret_key. Сгенерируйте случайный ключ размером 256 бит в базовой шестнадцатеричной системе с помощью инструмента типа openssl: openssl rand -base64 32.

  • Запросный гвард &Cookies был удален в пользу Cookies

    Измените &Cookies на позициях запросного гварда на Cookies.

  • Метод Rocket::launch() теперь возвращает объект типа LaunchError, а не вызывает панику.

    Для старого поведения добавьте точку с запятой после вызова метода .launch(): .launch();.

  • Маршруты без параметров запроса совпадают с запросами с или без параметров запроса.

    Обходного пути нет, но данное изменение может позволить удалить ручные ранги маршрутов.

  • Атрибут маршрута format для запросов без нагрузки совпадает с заголовком Accept.

    Кроме использования пользовательского запросного гварда, обходного пути нет. Ранее, format всегда совпадал с заголовком Content-Type, независимо от того, указывала ли метод запроса наличие нагрузки или нет. * Тип данных &str больше не может использоваться в структурах формы или параметрах.

    Используйте новый тип данных [&RawStr].

  • ContentType больше не является запросным гвардом.

    Используйте &ContentType вместо этого.

  • Метод Request::content_type() теперь возвращает &ContentType, а не ContentType.

    Используйте .clone() для преобразования &ContentType в ContentType, если требуется такой тип данных.

  • Метод Response::header_values() был удален. Теперь метод Response::headers() возвращает объект типа &HeaderMap.

    Вызов метода Response::headers() можно заменить на Response::headers().iter(). Вызов метода Response::header_values(name) можно заменить на Response::headers().get(name).

  • Коллизии маршрутов приводят к жесткой ошибке и панике.

    Обходного пути нет. Ранее, коллизии маршрутов были предупреждением.

  • Trait [IntoOutcome] расширен и стал более гибким.

    Обходного пути нет. Метод IntoOutcome::into_outcome() теперь принимает значение типа Failure для использования. Был добавлен метод IntoOutcome::or_forward() для возврата объекта типа Forward при наличии ошибки в self.

  • Опция 'testing' была удалена.

    Удалите features = ["testing"] из файла Cargo.toml. Используйте новую модульную структуру для тестирования.

  • Библиотека serde была обновлена до версии OnClickListener 1.0.

    Нет альтернативного решения. Убедитесь, что все зависимости зависят от serde 1.0.

  • config::active() был удален. Используйте метод [Rocket::config()], чтобы получить конфигурацию до запуска. Если требуется, используйте [управляемое состояние] для хранения информации о конфигурации для последующего использования.

  • Интерфейс трейта [Responder] изменился.

    Метод Responder::respond(self) был удален в пользу Responder::respond_to(self, &Request). Ответчики могут динамически корректировать свой ответ в зависимости от входящего запроса.

  • Метод Outcome::of(Responder) был удален, а метод Outcome::from(&Request, Responder) добавлен.

    Используйте Outcome::from(...) вместо Outcome::of(...).

  • Использование шаблонов требует прикрепления Template::fairing().

    Вызовите .attach(Template::fairing()) на экземпляре Rocket вашего приложения перед запуском.

  • Реализация Display для типа Template была удалена.

    Используйте метод [Template::show()], чтобы непосредственно отобразить шаблон.

  • Метод Request::new() больше не экспортирован.

    Нет альтернативного решения.

  • Интерфейс трейта [FromForm] изменился.

    Метод Responder::from_form_items(&mut FormItems) был удален в пользу Responder::from_form(&mut FormItems, bool). Второй параметр указывает, должна ли парсинг строго выполняться (true) или нет (false).

  • Тип LoggingLevel был удален как корневой переэкспортируемый тип.

    Теперь его можно импортировать из rocket::config::LoggingLevel.

  • Был добавлен вариант Io к типу ошибки [ConfigError]. Убедитесь, что конструкция match для ConfigError включает вариант Io.

  • Метод [ContentType::from_extension()] теперь возвращает значение типа Option<ContentType>.

    Для старого поведения используйте .unwrap_or(ContentType::Any).

  • Трейт конфигурации IntoValue был удалён в пользу Into<Value>.

    Нет альтернативного решения. Используйте Into<Value> там, где это необходимо.

  • Тип данных rocket_contrib::JSON был переименован в [rocket_contrib::Json].

    Используйте Json вместо JSON.

  • Все структуры в модуле [content] используют имена с заглавной буквы.

    Используйте Json, Xml, Html и Css вместо JSON, XML, HTML и CSS соответственно.[&RawStr]: https://api.rocket.rs/v0.3/rocket/http/struct.RawStr.html [IntoOutcome]: https://api.rocket.rs/v0.3/rocket/outcome/trait.IntoOutcome.html [local]: https://api.rocket.rs/v0.3/rocket/local/index.html [Rocket::config()]: https://api.rocket.rs/v0.3/rocket/struct.Rocket.html#method.config [управляемое состояние]: https://rocket.rs/v0.3/guide/state/ [Responder]: https://api.rocket.rs/v0.3/rocket/response/trait.Responder.html [Template::show()]: https://api.rocket.rs/v0.3/rocket_contrib/struct.Template.html#method.show [FromForm]: https://api.rocket.rs/v0.3/rocket/request/trait.FromForm.html [ConfigError]: https://api.rocket.rs/v0.3/rocket/config/enum.ConfigError.html [ContentType::from_extension()]: https://api.rocket.rs/v0.3/rocket/http/struct.ContentType.html#method.from_extension [rocket_contrib::Json]: https://api.rocket.rs/v0.3/rocket_contrib/struct.Json.html [content]: https://api.rocket.rs/v0.3/rocket/response/content/index.html

Общие улучшения

Кроме новых функций, в Rocket были внедрены следующие улучшения: * В HTTP заголовке сервера Server слово "Rocket" теперь пишется с большой буквы.

  • Генерический параметр rocket_contrib::Json по умолчанию установлен как json::Value.
  • Удалён пробел '...' в сообщении запуска.
  • Сообщение запуска выводится независимо от среды конфигурации.
  • Для отладки реализованы методы FromData для типов данных Vec<u8> и String.
  • Отображаемый порт при запуске — это порт, который был распознан, а не тот, что указан в конфигурации.
  • Библиотека зависимости uuid была обновлена до версии 0.5.
  • Библиотека зависимости base64 была обновлена до версии 0.6.
  • Библиотека зависимости toml была обновлена до версии 0.4.
  • Библиотека зависимости handlebars была обновлена до версии 0.27.
  • Библиотека зависимости tera была обновлена до версии 0.10.
  • [yansi] используется для всех цветовых эффектов в терминале.
  • Поддерживается канал выпуска rustc dev во время сборки.
  • [Config] экспортирована из корневого пространства имён.
  • Реализованы методы Clone и Debug для типа данных [Request].
  • Конфигурационный параметр workers теперь по умолчанию равен num_cpus * 2.
  • Улучшено консольное логирование для значений конфигурации, представленных в виде таблиц.
  • Реализованы методы PartialOrd, Ord и Hash для типа данных [State].
  • Формат запроса всегда записывается в лог при его доступности.
  • Соответствие маршрутов на основе format теперь работает так, как описано в документации.[yansi]: https://crates.io/crates/yansi [Request]: https://api.rocket.rs/v0.3/rocket/struct.Request.html [State]: https://api.rocket.rs/v0.3/rocket/struct.State.html

Инфраструктура

  • Все примеры теперь содержат тестовый набор.
  • Ветка master теперь использует номер версии с суффиксом -dev.

Версия 0.2.8 (июнь 01, 2017)

Генерация кода

  • Линтеры были обновлены для ночного сборочного варианта 2017-06-01.
  • Минимально требуемая версия компилятора rustc1.19.0-nightly (2017-06-01).

Версия 0.2.7 (май 26, 2017)

Генерация кода

  • Генерация кода была обновлена для ночного сборочного варианта 2017-05-26.

Версия 0.2.6 (апрель 17, 2017)

Генерация кода

  • Разрешено использование полей k и v в структурах FromForm путём избежания коллизий идентификаторов (#265).

Версия 0.2.5 (апрель 16, 2017)

Генерация кода

  • Линтеры были обновлены для ночного сборочного варианта 2017-04-15.
  • Минимально требуемая версия компилятора rustc1.18.0-nightly (2017-04-15).

Версия 0.2.4 (март 30, 2017)

Генерация кода

  • Кодогенерация была обновлена для ночного сборочного варианта 2017-03-30.
  • Минимально требуемая версия компилятора rustc1.18.0-nightly (2017-03-30).

Версия 0.2.3 (22 марта 2017 года)

Исправления

  • Несколько значений заголовков с одинаковым именем теперь правильно сохраняются (#223).

Ядро

  • Методы get_slice и get_table были добавлены в Config.

  • Возможность использования ограниченной публичности (pub_restricted) была стабилизована!## Генерация кода

  • Предупреждения были обновлены для ночного сбора 2017-03-20.

  • Минимально требуемый rustc — это 1.17.0-nightly (2017-03-22).

Инфраструктура

  • Скрипт тестирования теперь отклоняет пробелы в конце строки.

Версия 0.2.2 (26 февраля 2017 года)

Генерация кода

  • Предупреждения были обновлены для ночного сбора 2017-02-25 и 2017-02-26.
  • Минимально требуемый rustc — это 1.17.0-nightly (2017-02-26).

Версия 0.2.1 (24 февраля 2017 года)

Исправления в ядре

  • Функции удаления cookies типа Flash работают так, как ожидалось, независимо от пути.
  • config корректно принимает адреса IPv6.
  • Несколько заголовков Set-Cookie корректно устанавливаются.

Улучшения в ядре

  • Реализованы Display и Error для ConfigError.
  • Добавлены известные типы контента: webp, ttf, otf, woff, и woff2.
  • Маршруты предварительно сортированы для более быстрого маршрутизирования.
  • Добавлены методы into_bytes и into_inner для Body.

Генерация кода

  • Исправлена ошибка предупреждения unmanaged_state, чтобы она работала с заранее заполненными псевдонимами типов.

Вкладчики

  • Лучшие ошибки выдаются при ошибках парсинга шаблонов Tera.

Документация

  • Исправлены опечатки в документах manage и JSON.

Инфраструктура

  • Обновлены doctests для последнего nightly Cargo.

Версия 0.2.0 (6 февраля 2017 года)

Подробные заметки выпуска версии 0.2 также доступны на rocket.rs.## Новые возможностиЭтот выпуск включает следующие новые возможности:

  • Введено управляемое состояние.
  • Добавлены проверки, предупреждающие о независимом состоянии и отмонтированных маршрутах.
  • Добавлена возможность установки конфигурационных параметров через переменные окружения.
  • Структуры Config могут быть созданы с помощью ConfigBuilder, который следует паттерну строителя.
  • Логирование может быть включено или выключено при помощи второго параметра метода Rocket::custom.
  • Добавлены методы name и value к Header для получения имени и значения заголовка.
  • Новый конфигурационный параметр workers можно использовать для установки количества потоков, используемых Rocket.
  • Адрес удаленного соединения доступен через Request.remote(). Предварительная обработка запроса заменяет удаленный IP значением из заголовка X-Real-IP, если он присутствует.
  • Во время тестирования удаленный адрес можно установить через MockRequest.remote().
  • Защитник запроса SocketAddr получает удаленный адрес.
  • К типам contrib добавлен тип UUID.
  • rocket и rocket_codegen будут отказываться от сборки при использовании некомпилирующегося ночного выпуска и выводить приятные сообщения об ошибке.
  • Осуществлены крупные улучшения производительности и удобства использования в основной библиотеке cookie, включая добавление CookieBuilder.
  • Когда флажок отсутствует в форме, типы bool в структуре FromForm будут парситься как false. * Итератор FormItems может быть запрошен для полного парсинга через completed и exhausted.
    • Маршруты для запросов OPTIONS могут быть объявлены с помощью декоратора options.
    • Строка может быть закодирована в процентах через URI::percent_encode().

Изменения, нарушающие совместимостьЭта версия включает несколько изменений, нарушающих совместимость. Эти изменения приведены ниже вместе с краткими примечаниями о том, как следует обрабатывать эти изменения в существующих приложениях.

  • Rocket::custom принимает два параметра, первый из которых — это Config по значению.

    Вызов в виде v0.1: Rocket::custom(&config) теперь выглядит так: Rocket::custom(config, false).

  • Шаблоны Tera названы без расширения.

    Шаблон с именем name.html.tera теперь просто name.

  • Метод unwrap для типа JSON переименован в into_inner.

    Вызов .unwrap() следует заменить на .into_inner().

  • Макрос map! был удален в пользу макроса json!.

    Вызов вида map!{ "a" => b } можно записать следующим образом: json!({ "a": b }).

  • Заголовок hyper::SetCookie больше не экспортирован.

    Используйте тип Cookie напрямую как тип Into<Header>.

  • Тип Content-Type для String теперь text/plain.

    Для ответов на основе String используйте content::Plain<String>.

  • Метод Request.content_type() возвращает Option<ContentType>.

    Используйте .unwrap_or(ContentType::Any) для получения старого поведения.

  • Защитник запроса ContentType передает, когда запрос не имеет заголовка Content-Type.

    Используйте Option<ContentType> и .unwrap_or(ContentType::Any) для старого поведения.

  • Инстанс Rocket должен объявляться до MockRequest.

    Измените порядок вызова rocket::ignite() и MockRequest::new(). * Роут с указанием format теперь соответствует только запросам с тем же форматом.

    Ранее роут с указанием format соответствовал запросам без указанного формата. В этом случае нет способа обойти данное изменение; просто укажите форматы там, где они требуются.

  • Прямое создание объектов FormItem больше недопустимо.

    Вместо создания в виде FormItem(string) используйте FormItem::from(string).

  • Метод from_from_string(&str) в FromForm удален в пользу метода from_form_items(&mut FormItems).

    Большинство реализаций должны использовать FormItems внутренне; просто используйте переданный FormItems. В других случаях строка формы может быть получена через метод inner_str для FormItems.

  • Config::{set, default_for} устарели.

    Вместо set используйте методы set_{параметр}, а вместо default_fornew или build.

  • Роутинговые пути должны быть абсолютными.

    Добавьте слеш / в начало относительного пути, чтобы преобразовать его в абсолютный.

  • Роутинговые пути не могут содержать пустых сегментов.

    Удалите любые пустые сегменты, включая завершающие, из роутингового пути.

Исправление ошибок

В этом выпуске были исправлены несколько ошибок:

  • Частичные шаблоны Handlebars не регистрировались правильно (#122).
  • Rocket::custom не устанавливал пользовательскую конфигурацию как активную.
  • Разрешалось наличие более одного динамического параметра в сегментах роута.## Общие улучшения

Кроме новых возможностей, Rocket получил следующие небольшие улучшения:

  • Rocket больше не перезаписывает статус ответа ловушки.
  • Тип конфигурации port теперь является правильным u16.
  • Проблемы Clippy, внедренные генератором кода, решены.
  • Handlebars был обновлен до версии 0.25.
  • Реализация PartialEq для типа Config не учитывает путь или ключ секрета.
  • Зависимость Hyper обновлена до версии 0.10.
  • Тип ошибки для JSON as FromData теперь представлен как SerdeError.
  • SVG добавлен как известный тип контента.
  • Серия Serde обновлена до версии 0.9.
  • Ошибки парсинга формы теперь приводят к коду ошибки 422.
  • Tera обновлен до версии 0.7.
  • pub(crate) используется повсеместно для обеспечения правил видимости.
  • Параметры запроса в маршрутах (/path?<param>) теперь записываются в журнал.
  • Маршруты с параметрами запроса и без них больше не пересекаются.

Инфраструктура

  • Тестирование было параллелизовано, что позволило ускорить сборку Travis в три раза.

Версия 0.1.6 (январь 26, 2017)

Инфраструктура

  • Версия Hyper закреплена за 0.9.14 из-за изменения версии выше семантики.

Версия 0.1.5 (январь 14, 2017)

Ядро

  • Исправлены проверки безопасности в реализации FromSegments для PathBuf.

Инфраструктура

  • Возможность proc_macro удалена из примеров из-за недостатка стабильности.# Версия 0.1.4 (январь 4, 2017)

Ядро

  • Названия заголовков теперь учитывают регистр.

Генерация кода

  • Минимальная поддерживаемая ночная версия — 2017-01-03.
  • Ошибка в форматировании Outcome исправлена (Succcess -> Success).
  • Добавлен ContentType::CSV.
  • Параметры динамических сегментов правильно разрешаются, даже при монтировании.
  • Методы запроса переопределяются только через поле _method методом POST.
  • Значения формы типа String правильно декодируются.

Генерация кода

  • Поле _method теперь правильно игнорируется при производстве FromForm.
  • Неизвестные типы контента в format больше не приводят к ошибкам.
  • Производство FromForm больше не вызывает предупреждение о deprication.
  • Генератор кода откажется строиться с неподдерживаемой версией rustc, выводя сообщение об ошибке и рекомендацию.
  • Добавлен декоратор head для запросов HEAD.
  • Добавлен декоратор route(OPTIONS) для запросов OPTIONS.

Вклад

  • Шаблоны с расширением .tera теперь корректно автоматически экранируются.
  • Вложенные имена шаблонов корректно разрешаются на Windows.
  • Шаблон реализует Display.
  • Зависимость Tera обновлена до версии 0.6.

Документация

  • Требования примера Todo уточнены в его README.

Тестирование

  • Добавлены тесты для примеров config, optional_result, optional_redirect и query_params.

  • Скрипт тестирования проверяет наличие табуляций и запрещает их использование.## Инфраструктура

  • Новый скрипт (bump_version.sh) автоматизирует повышение версий.

  • Конфигурационный скрипт выдаёт ошибку при неправильной поддержке команд readlink/readpath.

  • Бэдж Travis указывает на публичные сборки.

Версия 0.1.2 (24 декабря 2016 года)

Генерация кода

  • Исправление аргумента индекса get_raw_segments в генерации кода маршрутов (#41).
  • Параметры сегментов (<param..>) учитывают префиксы.

Вклад

  • Исправление разрешения вложенных имен шаблонов (#42).

Инфраструктура

  • Новый скрипт (publish.sh) автоматизирует публикацию на crates.io.
  • Новый скрипт (bump_version.sh) автоматизирует повышение версий.

Версия 0.1.1 (23 декабря 2016 года)

Ядро

  • Поле body в NamedFile Responder было потеряно во время перемещения; оно восстановлено!

Версия 0.1.0 (23 декабря 2016 года)

Это первое публичное выпуск Rocket!

Прерывание совместимостиВсе упоминания типов hyper в основных типах Rocket удалены. Rocket теперь реализует свои собственные типы Request и Response.

  • ContentType использует связанные константы вместо статических методов.
  • StatusCode был удален в пользу нового типа Status.
  • Типовой псевдоним Response заменен типом Response.
  • Метод Responder::respond больше не принимает тип из библиотеки Hyper.
  • Метод Responder::respond возвращает объект типа Response, принимает self по значению.
  • Метод Handler теперь возвращает Outcome вместо псевдонима типа Response.
  • Метод ErrorHandler возвращает Result.
  • Все типы Hyper* были перемещены в непрефиксированную версию в пространстве имён hyper::.
  • Метод MockRequest::dispatch теперь возвращает тип Response.
  • URIBuf был удален в пользу унифицированного типа URI.
  • Rocket паникует при использовании недопустимой динамической точки монтирования.

Ядро * Rocket автоматически обрабатывает запросы типа HEAD.

  • Введены новые типы Response и ResponseBuilder.
  • Введены новые типы Request, Header, Status и ContentType.

Тестирование

  • MockRequest позволяет использовать любой тип заголовка.
  • MockRequest поддерживает куки.

Генерация кода

  • Отладочный вывод по умолчанию отключен.
  • Переменная окружения ROCKET_CODEGEN_DEBUG включает логирование генерации кода.

Версия 0.0.11 (Декабрь 11, 2016)

Прямое потоковое чтение данных

Все входящие данные запросов теперь обрабатываются с использованием прямого потокового чтения. Это привело к значительным изменениям в API Rocket. Они суммаризированы следующими изменениями API:

  • Параметр маршрута form был удален.
  • Введен новый параметр маршрута data.
  • Формы теперь обрабатываются через параметр data и тип Form.
  • Удален параметр data из типа Request.
  • Добавлен преобразователь FromData со стандартной реализацией.
  • Преобразователь FromData используется для автоматического получения параметра data.
  • Responder стал финальным: он больше не может переходить к другим запросам.
  • Responder может переходить только к catcher'ам.

Нарушения совместимости * Параметр uri запроса стал приватным. Используйте метод uri().

  • Модуль form перемещён под модуль request.

  • response::data переименован в response::content.

  • Введён тип Outcome с вариантами Success, Failure и Forward.

  • Модуль outcome перемещён на уровень верхнего уровня.

  • Response теперь является псевдонимом типа Outcome.

  • Empty Responder удалён.

  • StatusResponder удалён в пользу модуля response::status.## Генерация кода

  • Обработчики ошибок могут принимать 0, 1 или 2 параметра.

  • FromForm теперь работает на пустых структурах.

  • Теперь правильно удаляются lifetime при генерации кода.

  • Любое допустимое имя теперь разрешено как параметр маршрута с одним параметром.

Ядро

  • Маршрут теперь клонируемый.
  • Тип Request больше не имеет параметров lifetime.
  • Тип Handler теперь включает параметр Data.
  • Модуль http открыт для использования.
  • Реализован Responder для типа () как пустого ответа.
  • Добавлена функция config::get() для доступа к глобальной конфигурации.
  • Введен модуль testing.
  • Rocket.toml позволяет использовать глобальную конфигурацию через таблицу [global].

Документация

  • Добавлен пример raw_upload.
  • Добавлен пример pastebin.
  • Описаны все публичные API.

Тестирование

  • Теперь сборка и запуск тестов выполняются с помощью флага --all-features.
  • Добавлена конфигурация AppVeyor для тестирования CI в Windows.

Версия 0.0.10 (Окт 03, 2016)

Нарушение совместимости

  • Удалён метод Rocket::new в пользу метода ignite.
  • Удалён метод Rocket::mount_and_launch в пользу цепочки вызовов mount(..).launch().
  • Методы mount и catch принимают тип Rocket по значению.
  • Все типы, связанные с HTTP, перемещены в модуль http.
  • Метод Template::render в contrib теперь принимает контекст по ссылке.

Ядро * Rocket теперь парсит опцию Rocket.toml для конфигурирования, используя разумные значения по умолчанию.

  • Переменная окружения ROCKET_ENV может использоваться для указания рабочего окружения.## Документация

  • Документирован тип ContentType.

  • Документирован тип Request.

  • Добавлен скрипт для сборки документации.

Тестирование

  • Скрипты теперь могут запускаться из любой директории.
  • Кэширование директорий Cargo в Travis для более быстрого тестирования.
  • Проверка того, что версии библиотек совпадают в скрипте тестирования.

Версия 0.0.9 (Сентябрь 29, 2016)

Нарушение совместимости

  • Переименован метод response::data_type в response::data.

Ядро

  • Rocket интерпретирует поле _method в формах как метод входящего запроса.
  • Добавлен тип Outcome::Bad для обозначения ответов, которые провалились внутренне.
  • Добавлен тип NamedFile Responder, который использует расширение файла для типа содержимого ответа.
  • Добавлен тип Stream Responder для потоковых ответов.

Расширения

  • Введен пакет contrib.
  • Добавлена поддержка JSON через JSON, реализующую FromRequest и Responder.
  • Добавлена поддержка шаблонизации через Template, реализующую Responder.

Документация

  • Начальный справочный материал.
  • Добавлены разделы документации, тестирования и участия в проекте в README.

Тестирование

  • Добавлено большое количество тестов генерации кода.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Rocket-rs.git
git@api.gitlife.ru:oschina-mirror/mirrors-Rocket-rs.git
oschina-mirror
mirrors-Rocket-rs
mirrors-Rocket-rs
master