lib.rs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use bytes::Bytes;
  2. pub mod dart;
  3. pub mod entities;
  4. mod protobuf;
  5. use crate::{dart::DartStreamSender, entities::SubscribeObject};
  6. use lib_dispatch::prelude::ToBytes;
  7. pub struct DartNotifyBuilder {
  8. id: String,
  9. payload: Option<Bytes>,
  10. error: Option<Bytes>,
  11. source: String,
  12. ty: i32,
  13. }
  14. impl DartNotifyBuilder {
  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 = self.payload.map(|bytes| bytes.to_vec());
  50. let error = self.error.map(|bytes| bytes.to_vec());
  51. let subject = SubscribeObject {
  52. source: self.source,
  53. ty: self.ty,
  54. id: self.id,
  55. payload,
  56. error,
  57. };
  58. match DartStreamSender::post(subject) {
  59. Ok(_) => {}
  60. Err(error) => log::error!("Send observable subject failed: {}", error),
  61. }
  62. }
  63. }