Добрый день!
Есть простая программа — HTTP-сервис.
При обработке get-запроса программа использует файловую базу данных sqlite. Для работы с БД используется rocket_db_pools.
Все сделано и работает как описано вот в этой статье:
https://docs.rs/rocket_db_pools/latest/rocket_db_pools/
В обычном "рабочем" режиме библиотека rocket "автоматически" вызывает функцию-обработчик get-запроса, и в качестве параметра передает ей объект соединения с БД Connection<LogsDB>. Этот параметр-объект создается "автоматически" внутри библиотеки rocket.
Проблема возникла при реализации тестовой функции.
Я из тестовой функции хочу вызвать функцию, которая реализует обработку get-запроса. Для этого нужно "вручную" создать объект Connection<LogsDB> и передать его в обработчик-запроса.
Но как это сделать?.
Как в тестовой функции "вручную" создать объект Connection<LogsDB>?
Я читал описание этой библиотеки, но так и не смог ничего найти.
Подскажите пожалуйста.
Вот код программы:
use rocket::get;
use rocket_db_pools::{Connection, Database};
use rocket_db_pools::sqlx::Row;
#[derive(Database)]
#[database("data_store")]
struct LogsDB(sqlx::SqlitePool);
#[get("/<id>")]
//async fn read(mut db: Connection<LogsDB>, id: i64) -> Option<Log> {
async fn read(mut db: Connection<LogsDB>, id: i64) {
let res = sqlx::query("SELECT content FROM logs WHERE id = ?").bind(id)
.fetch_one(&mut **db).await;
// .and_then(|r| Ok(log::Log(r.try_get(0)?)))
// .ok()
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_load_requests_and_write_updxmlfile() {
let l_rocket = rocket::build().attach(LogsDB::init());
//let l_database = MarkingDatabase::init();
let l_db1 = LogsDB::fetch(&l_rocket).unwrap();
let mut l_db_connection1 = l_db1.aquire().await.unwrap();
read(l_db_connection1, 50)?;
}
}
Я так понимаю, что объект Connection<LogsDB> надо как-то получить в строке
"let mut l_db_connection1 = l_db1.aquire().await.unwrap();"
Компилятор выдает ошибку на эту строку.