lib.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. use bytes::Bytes;
  2. pub mod dart;
  3. pub mod entities;
  4. mod protobuf;
  5. use crate::{dart::RustStreamSender, entities::ObservableSubject};
  6. use flowy_dispatch::prelude::ToBytes;
  7. pub struct NotifyBuilder {
  8. id: String,
  9. payload: Option<Bytes>,
  10. error: Option<Bytes>,
  11. source: String,
  12. ty: i32,
  13. }
  14. impl NotifyBuilder {
  15. pub fn new<T: Into<i32>>(id: &str, ty: T, source: &str) -> Self {
  16. Self {
  17. id: id.to_owned(),
  18. ty: ty.into(),
  19. payload: None,
  20. error: None,
  21. source: source.to_owned(),
  22. }
  23. }
  24. pub fn payload<T>(mut self, payload: T) -> Self
  25. where
  26. T: ToBytes,
  27. {
  28. match payload.into_bytes() {
  29. Ok(bytes) => self.payload = Some(bytes),
  30. Err(e) => {
  31. log::error!("Set observable payload failed: {:?}", e);
  32. },
  33. }
  34. self
  35. }
  36. pub fn error<T>(mut self, error: T) -> Self
  37. where
  38. T: ToBytes,
  39. {
  40. match error.into_bytes() {
  41. Ok(bytes) => self.error = Some(bytes),
  42. Err(e) => {
  43. log::error!("Set observable error failed: {:?}", e);
  44. },
  45. }
  46. self
  47. }
  48. pub fn send(self) {
  49. let payload = match self.payload {
  50. None => None,
  51. Some(bytes) => Some(bytes.to_vec()),
  52. };
  53. let error = match self.error {
  54. None => None,
  55. Some(bytes) => Some(bytes.to_vec()),
  56. };
  57. let subject = ObservableSubject {
  58. source: self.source,
  59. ty: self.ty,
  60. id: self.id,
  61. payload,
  62. error,
  63. };
  64. log::debug!("Notify {}", subject);
  65. match RustStreamSender::post(subject) {
  66. Ok(_) => {},
  67. Err(error) => log::error!("Send observable subject failed: {}", error),
  68. }
  69. }
  70. }