helper.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'dart:typed_data';
  2. import 'package:flowy_sdk/protobuf/flowy-dart-notify/protobuf.dart';
  3. import 'package:flowy_sdk/protobuf/flowy-user/protobuf.dart';
  4. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  5. import 'package:flowy_sdk/protobuf/flowy-workspace/observable.pb.dart';
  6. import 'package:dartz/dartz.dart';
  7. // class WorkspaceObservableParser {
  8. // String id;
  9. // void Function(WorkspaceObservable, Either<Uint8List, WorkspaceError>)
  10. // callback;
  11. // WorkspaceObservableParser({required this.id, required this.callback});
  12. // void parse(ObservableSubject subject) {
  13. // if (subject.id != id) {
  14. // return;
  15. // }
  16. // final ty = WorkspaceObservable.valueOf(subject.ty);
  17. // if (ty == null) {
  18. // return;
  19. // }
  20. // if (subject.hasPayload()) {
  21. // final bytes = Uint8List.fromList(subject.error);
  22. // callback(ty, left(bytes));
  23. // } else if (subject.hasError()) {
  24. // final bytes = Uint8List.fromList(subject.error);
  25. // final error = WorkspaceError.fromBuffer(bytes);
  26. // callback(ty, right(error));
  27. // } else {
  28. // // do nothing
  29. // }
  30. // }
  31. // }
  32. typedef UserObservableCallback = void Function(
  33. UserObservable, Either<Uint8List, UserError>);
  34. class UserObservableParser extends ObservableParser<UserObservable, UserError> {
  35. UserObservableParser(
  36. {required String id, required UserObservableCallback callback})
  37. : super(
  38. id: id,
  39. callback: callback,
  40. tyParser: (ty) => UserObservable.valueOf(ty),
  41. errorParser: (bytes) => UserError.fromBuffer(bytes),
  42. );
  43. }
  44. typedef WorkspaceObservableCallback = void Function(
  45. WorkspaceObservable, Either<Uint8List, WorkspaceError>);
  46. class WorkspaceObservableParser
  47. extends ObservableParser<WorkspaceObservable, WorkspaceError> {
  48. WorkspaceObservableParser(
  49. {required String id, required WorkspaceObservableCallback callback})
  50. : super(
  51. id: id,
  52. callback: callback,
  53. tyParser: (ty) => WorkspaceObservable.valueOf(ty),
  54. errorParser: (bytes) => WorkspaceError.fromBuffer(bytes),
  55. );
  56. }
  57. class ObservableParser<T, E> {
  58. String id;
  59. void Function(T, Either<Uint8List, E>) callback;
  60. T? Function(int) tyParser;
  61. E Function(Uint8List) errorParser;
  62. ObservableParser(
  63. {required this.id,
  64. required this.callback,
  65. required this.errorParser,
  66. required this.tyParser});
  67. void parse(ObservableSubject subject) {
  68. if (subject.id != id) {
  69. return;
  70. }
  71. final ty = tyParser(subject.ty);
  72. if (ty == null) {
  73. return;
  74. }
  75. if (subject.hasPayload()) {
  76. final bytes = Uint8List.fromList(subject.payload);
  77. callback(ty, left(bytes));
  78. } else if (subject.hasError()) {
  79. final bytes = Uint8List.fromList(subject.error);
  80. final error = errorParser(bytes);
  81. callback(ty, right(error));
  82. } else {
  83. // do nothing
  84. }
  85. }
  86. }