установка пула в качестве типа структуры приводит к ошибке

#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(); ^^^^ неизвестное поле Я думаю, что моя проблема более фундаментальна и коренится в неправильном понимании того, что здесь происходит.