Руководство Rocket для состояния базы данных гласит:
Когда необходимо подключение к базе данных, используйте тип [пул базы данных] в качестве защиты запроса
Поскольку пул базы данных может быть создан с помощью FromRequest
, а вы реализуете FromRequest
, используйте существующую реализацию с помощью DbPool::from_request(request)
:
use rocket::{
request::{self, FromRequest, Request},
Outcome,
};
// =====
// This is a dummy implementation of a pool
// Refer to the Rocket guides for the correct way to do this
struct DbPool;
impl<'a, 'r> FromRequest<'a, 'r> for DbPool {
type Error = &'static str;
fn from_request(_: &'a Request<'r>) -> request::Outcome<Self, Self::Error> {
Outcome::Success(Self)
}
}
// =====
struct MyDbType;
impl MyDbType {
fn from_db(_: &DbPool) -> Self {
Self
}
}
impl<'a, 'r> FromRequest<'a, 'r> for MyDbType {
type Error = &'static str;
fn from_request(request: &'a Request<'r>) -> request::Outcome<Self, Self::Error> {
let pool = DbPool::from_request(request);
pool.map(|pool| MyDbType::from_db(&pool))
}
}