workspace_deps.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. use flowy_database::ConnectionPool;
  2. use flowy_user::services::user::UserSession;
  3. use flowy_workspace::{
  4. errors::WorkspaceError,
  5. module::{WorkspaceDatabase, WorkspaceUser},
  6. };
  7. use std::sync::Arc;
  8. pub struct WorkspaceDepsResolver {
  9. inner: Arc<Resolver>,
  10. }
  11. struct Resolver {
  12. pub(crate) user_session: Arc<UserSession>,
  13. }
  14. impl WorkspaceDepsResolver {
  15. pub fn new(user_session: Arc<UserSession>) -> Self {
  16. Self {
  17. inner: Arc::new(Resolver { user_session }),
  18. }
  19. }
  20. pub fn split_into(self) -> (Arc<dyn WorkspaceUser>, Arc<dyn WorkspaceDatabase>) {
  21. let user: Arc<dyn WorkspaceUser> = self.inner.clone();
  22. let database: Arc<dyn WorkspaceDatabase> = self.inner.clone();
  23. (user, database)
  24. }
  25. }
  26. impl WorkspaceDatabase for Resolver {
  27. fn db_pool(&self) -> Result<Arc<ConnectionPool>, WorkspaceError> {
  28. self.user_session
  29. .db_pool()
  30. .map_err(|e| WorkspaceError::internal().context(e))
  31. }
  32. }
  33. impl WorkspaceUser for Resolver {
  34. fn user_id(&self) -> Result<String, WorkspaceError> {
  35. self.user_session
  36. .user_id()
  37. .map_err(|e| WorkspaceError::internal().context(e))
  38. }
  39. fn token(&self) -> Result<String, WorkspaceError> {
  40. self.user_session
  41. .token()
  42. .map_err(|e| WorkspaceError::internal().context(e))
  43. }
  44. }