Depot — это структура для хранения временных данных, связанных с обработкой одного запроса. Промежуточное ПО может сохранять обработанные данные в Depot для последующего использования другими компонентами.
При получении запроса от клиентского браузера сервер создает экземпляр Depot
. Этот экземпляр существует в течение всего времени обработки запроса промежуточным ПО и Handler
, после чего уничтожается.
Например, в промежуточном ПО аутентификации можно установить current_user
, а затем в последующих обработчиках или промежуточном ПО получить информацию о текущем пользователе.
Depot
предназначен для хранения и обмена данными в процессе обработки запроса. Он реализует типобезопасный контейнер данных с двумя основными режимами работы:
insert
/get
для работы со значениями по строковым ключамinject
/obtain
для работы со значениями на основе их типаКак показано в примерах, Depot
особенно полезен для передачи данных между промежуточным ПО и обработчиками. Промежуточное ПО может сохранять значения (например, информацию о пользователе, статус аутентификации), которые затем могут быть получены последующими обработчиками без повторных вычислений или запросов. Дизайн Depot
гарантирует согласованность и доступность данных на протяжении всей цепочки обработки запроса, что делает его ключевым инструментом для сложных веб-приложений.
insert
иget
Как показано выше, вы можете вставить пару key
и value
в Depot
с помощью insert
. Для таких значений используется прямое получение через get
.
Если ключ не существует или тип значения не соответствует ожидаемому, возвращается None
.
inject
иobtain
В некоторых случаях существуют значения, для которых не требуется конкретный ключ — когда для данного типа существует только один экземпляр. Для таких значений можно использовать inject
для вставки и obtain
для получения. Эти методы не требуют указания ключа.
Категория | Метод | Описание |
---|---|---|
Создание/ёмкость | new() | Создает пустой Depot |
with_capacity(capacity) | Создает Depot с указанной ёмкостью | |
capacity() | Возвращает текущую ёмкость | |
inner() | Возвращает ссылку на внутренний HashMap | |
Внедрение/получение по типу | inject<V>(value) | Внедряет значение по типу |
obtain<T>() | Получает ссылку на внедренное значение | |
obtain_mut<T>() | Получает изменяемую ссылку на внедренное значение | |
contains<T>() | Проверяет наличие значения типа | |
scrape<T>() | Удаляет и возвращает внедренное значение | |
Операции с ключами | insert(key, value) | Вставляет пару ключ-значение |
get<V>(key) | Получает ссылку на значение по ключу | |
get_mut<V>(key) | Получает изменяемую ссылку на значение по ключу | |
contains_key(key) | Проверяет наличие ключа | |
remove<V>(key) | Удаляет и возвращает значение по ключу | |
delete(key) | Удаляет пару ключ-значение |