model.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use crate::{errors::DocError, services::ws::DocumentWebSocket};
  2. use flowy_document_infra::entities::doc::{NewDocUser, RevId};
  3. use futures::future::BoxFuture;
  4. use lib_infra::retry::Action;
  5. use std::{future, sync::Arc};
  6. pub(crate) struct OpenDocAction {
  7. user_id: String,
  8. rev_id: RevId,
  9. doc_id: String,
  10. ws: Arc<dyn DocumentWebSocket>,
  11. }
  12. impl OpenDocAction {
  13. pub(crate) fn new(user_id: &str, doc_id: &str, rev_id: &RevId, ws: &Arc<dyn DocumentWebSocket>) -> Self {
  14. Self {
  15. user_id: user_id.to_owned(),
  16. rev_id: rev_id.clone(),
  17. doc_id: doc_id.to_owned(),
  18. ws: ws.clone(),
  19. }
  20. }
  21. }
  22. impl Action for OpenDocAction {
  23. type Future = BoxFuture<'static, Result<Self::Item, Self::Error>>;
  24. type Item = ();
  25. type Error = DocError;
  26. fn run(&mut self) -> Self::Future {
  27. let new_doc_user = NewDocUser {
  28. user_id: self.user_id.clone(),
  29. rev_id: self.rev_id.clone().into(),
  30. doc_id: self.doc_id.clone(),
  31. };
  32. match self.ws.send(new_doc_user.into()) {
  33. Ok(_) => Box::pin(future::ready(Ok::<(), DocError>(()))),
  34. Err(e) => Box::pin(future::ready(Err::<(), DocError>(e))),
  35. }
  36. }
  37. }