use flowy_database::ConnectionPool; use flowy_user::services::user::UserSession; use flowy_workspace::{ errors::WorkspaceError, module::{WorkspaceDatabase, WorkspaceUser}, }; use std::sync::Arc; pub struct WorkspaceDepsResolver { inner: Arc, } struct Resolver { pub(crate) user_session: Arc, } impl WorkspaceDepsResolver { pub fn new(user_session: Arc) -> Self { Self { inner: Arc::new(Resolver { user_session }), } } pub fn split_into(self) -> (Arc, Arc) { let user: Arc = self.inner.clone(); let database: Arc = self.inner.clone(); (user, database) } } impl WorkspaceDatabase for Resolver { fn db_pool(&self) -> Result, WorkspaceError> { self.user_session .db_pool() .map_err(|e| WorkspaceError::internal().context(e)) } } impl WorkspaceUser for Resolver { fn user_id(&self) -> Result { self.user_session .user_id() .map_err(|e| WorkspaceError::internal().context(e)) } fn token(&self) -> Result { self.user_session .token() .map_err(|e| WorkspaceError::internal().context(e)) } }