helper.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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(UserObservable, Either<Uint8List, UserError>);
  33. class UserObservableParser extends ObservableParser<UserObservable, UserError> {
  34. UserObservableParser({required String id, required UserObservableCallback callback})
  35. : super(
  36. id: id,
  37. callback: callback,
  38. tyParser: (ty) => UserObservable.valueOf(ty),
  39. errorParser: (bytes) => UserError.fromBuffer(bytes),
  40. );
  41. }
  42. typedef WorkspaceObservableCallback = void Function(WorkspaceObservable, Either<Uint8List, WorkspaceError>);
  43. class WorkspaceObservableParser extends ObservableParser<WorkspaceObservable, WorkspaceError> {
  44. WorkspaceObservableParser({required String id, required WorkspaceObservableCallback callback})
  45. : super(
  46. id: id,
  47. callback: callback,
  48. tyParser: (ty) => WorkspaceObservable.valueOf(ty),
  49. errorParser: (bytes) => WorkspaceError.fromBuffer(bytes),
  50. );
  51. }
  52. class ObservableParser<T, E> {
  53. String id;
  54. void Function(T, Either<Uint8List, E>) callback;
  55. T? Function(int) tyParser;
  56. E Function(Uint8List) errorParser;
  57. ObservableParser({required this.id, required this.callback, required this.errorParser, required this.tyParser});
  58. void parse(ObservableSubject subject) {
  59. if (subject.id != id) {
  60. return;
  61. }
  62. final ty = tyParser(subject.ty);
  63. if (ty == null) {
  64. return;
  65. }
  66. if (subject.hasPayload()) {
  67. final bytes = Uint8List.fromList(subject.payload);
  68. callback(ty, left(bytes));
  69. } else if (subject.hasError()) {
  70. final bytes = Uint8List.fromList(subject.error);
  71. final error = errorParser(bytes);
  72. callback(ty, right(error));
  73. } else {
  74. // do nothing
  75. }
  76. }
  77. }