Я пытаюсь реализовать функцию, которая отправляет запрос в одноэлементный пул Actix r2d2 (DbExecutor
), который обрабатывает запрос и возвращает ответ, который можно использовать в приложении (приложение musi c).
Поскольку я запрашиваю использование этого DBExecutioner
во всем приложении, для меня нет смысла реализовывать ответ, отличный от представления модели. Я пытаюсь получить прямой ответ от пула базы данных.
Я реализовал обработчик для DbExecutor
следующим образом.
Сначала я создаю одноэлементное представление пула базы данных:
db / mod.rs
pub fn shared_store() -> Store {
let store = init_store();
let store = match store {
Some(store) => store,
None => shared_store() // TODO wait for period
};
store
}
fn init_store() -> Option<Store> {
...
}
Затем я неявно создаю обработчики для этого экземпляра DbExecutor
. Т.е. когда сообщение отправляется на DbExecutor
, оно будет предоставлять соответствующий ответ, полученный в результате запроса к базе данных.
db/instruments.rs
#[derive(Debug)]
pub struct GetInstrumentList {}
#[derive(Debug)]
pub struct InstrumentListResponse {
pub instruments: Vec<Instrument>,
}
impl Message for GetInstrumentList {
type Result = Result<InstrumentListResponse>;
}
impl Handler<GetInstrumentList> for DbExecutor {
type Result = Result<InstrumentListResponse>;
fn handle(&mut self, msg: GetInstrumentList, _: &mut Self::Context) -> Self::Result {
... ommitted for brevity
}
}
Моя проблема возникает при реализации следующих функций. Он должен возвращать Instrument
ответ от SyncArbiter
, однако он возвращает несоответствующий результат, как указано ответом, следующим за этим кодом:
service/instrument.rs
pub fn get_instruments_list(limit: Option<usize>, offset: Option<usize>) -> InstrumentListResponse {
let db = shared_store().db.clone();
let res = db.send(GetInstrumentList{
params: InstrumentListParams{
limit:limit,
offset: offset
}
})
.flatten().wait();
res
}
45 | Res | ^^^ ожидаемая структура db::instruments::InstrumentListResponse
, найдено перечисление std::result::Result
| = примечание: ожидаемая структура db::instruments::InstrumentListResponse
найдено enum std::result::Result<db::instruments::InstrumentListResponse,
error::Error>
Как реализовать вышеуказанные функции таким образом, чтобы устранить эту ошибку?