#rust
#Ржавчина
Вопрос:
У меня проблема с настройкой пула в качестве типа структуры.
use super::db::{init_connection, models};
actix_web::Responder;
use diesel::r2d2::Pool;
#[derive(Debug)]
pub struct Basic {
pool: Pool
}
impl Basic {
pub fn new(amp;self) {
self.pool = init_connection().unwind();
}
}
Я продолжаю получать ошибку
pool: Pool
^^^^ expected 1 type argument
Насколько я понимаю, «Пул» — это тип. Что еще здесь требуется?
Комментарии:
1.
Pool
требуется параметр типа: docs.diesel.rs/diesel/r2d2/struct.Pool.html
Ответ №1:
Pool — это общая структура типа Pool, где M представляет признак, который должен быть реализован для специфичной для базы данных логики для создания подключения к базе данных. Например, существуют отдельные реализации этой функции для использования с MySQL, Postgres, sqlite, mongodb и т. Д. В зависимости от базы данных, которую вы хотите использовать, найдите подходящий ящик, такой как r2d2-mongodb, r2d2_sqlite и т. Д.
Для Mysql одним из вариантов является использование ящика r2d2_mysql. У этого есть структура MysqlConnectionManager, которая реализует свойство r2d2::ManageConnection . Его можно использовать, как показано:
// Imports
use r2d2::Pool;
use r2d2_mysql::MysqlConnectionManager;
// Define data type for connection pool. This can be part of app state
pool: Arc<Pool<MysqlConnectionManager>>,
// Initialize connection pool
let manager = r2d2_mysql::MysqlConnectionManager::new(builder);
let pool = Arc::new(r2d2::Pool::new(manager).unwrap());
Например, обратитесь к документам crate здесь: https://github.com/outersky/r2d2-mysql
Комментарии:
1. Извините за поздний ответ. Я знаю, что пул является общим. В моем случае я фактически использую реализацию Mysql. Но M — это, и, вероятно, это моя проблема, имя признака или нет? И эта черта — diesel ::r2d2::Pool, верно? Итак, что мне нужно сделать: pub struct Basic { pool: <diesel::r2d2::Pool> } Это было бы правильно? Я спрашиваю, потому что я тоже пробовал это, и я получаю self.pool = init_connection(); ^^^^ неизвестное поле Я думаю, что моя проблема более фундаментальна и коренится в неправильном понимании того, что здесь происходит.