appflowy пре 3 година
родитељ
комит
df432d11c3
36 измењених фајлова са 58 додато и 738 уклоњено
  1. 10 0
      backend/Cargo.lock
  2. 1 1
      frontend/app_flowy/packages/flowy_sdk/lib/dispatch/dispatch.dart
  3. 0 0
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pb.dart
  4. 0 0
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pbenum.dart
  5. 0 0
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pbjson.dart
  6. 0 0
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pbserver.dart
  7. 2 0
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/protobuf.dart
  8. 0 167
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pb.dart
  9. 0 7
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pbenum.dart
  10. 0 30
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pbjson.dart
  11. 0 9
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pbserver.dart
  12. 0 2
      frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/protobuf.dart
  13. 1 0
      frontend/rust-lib/Cargo.toml
  14. 1 0
      frontend/rust-lib/flowy-core/Cargo.toml
  15. 1 1
      frontend/rust-lib/flowy-core/src/core/core_context.rs
  16. 10 0
      frontend/rust-lib/flowy-net/Cargo.toml
  17. 2 0
      frontend/rust-lib/flowy-net/Flowy.toml
  18. 2 0
      frontend/rust-lib/flowy-net/src/entities/mod.rs
  19. 0 0
      frontend/rust-lib/flowy-net/src/entities/network_state.rs
  20. 2 0
      frontend/rust-lib/flowy-net/src/lib.rs
  21. 0 0
      frontend/rust-lib/flowy-net/src/protobuf/mod.rs
  22. 0 3
      frontend/rust-lib/flowy-net/src/protobuf/model/mod.rs
  23. 15 15
      frontend/rust-lib/flowy-net/src/protobuf/model/network_state.rs
  24. 0 1
      frontend/rust-lib/flowy-net/src/protobuf/proto/network_state.proto
  25. 1 0
      frontend/rust-lib/flowy-user/Cargo.toml
  26. 1 1
      frontend/rust-lib/flowy-user/src/handlers/user_handler.rs
  27. 1 1
      frontend/rust-lib/flowy-user/src/services/user/notifier.rs
  28. 1 1
      frontend/rust-lib/flowy-user/src/services/user/user_session.rs
  29. 2 1
      frontend/rust-lib/flowy-user/src/services/user/ws_manager.rs
  30. 0 2
      frontend/rust-lib/lib-infra/Flowy.toml
  31. 0 1
      frontend/rust-lib/lib-infra/src/entities/mod.rs
  32. 0 2
      frontend/rust-lib/lib-infra/src/lib.rs
  33. 0 478
      frontend/rust-lib/lib-infra/src/protobuf/model/kv.rs
  34. 0 9
      frontend/rust-lib/lib-infra/src/protobuf/proto/kv.proto
  35. 1 1
      frontend/scripts/flowy-tool/src/util/file.rs
  36. 4 5
      shared-lib/flowy-derive/src/derive_cache/derive_cache.rs

+ 10 - 0
backend/Cargo.lock

@@ -1237,6 +1237,7 @@ dependencies = [
  "flowy-database",
  "flowy-derive",
  "flowy-document",
+ "flowy-net",
  "futures",
  "futures-core",
  "lazy_static",
@@ -1334,6 +1335,14 @@ dependencies = [
  "url",
 ]
 
+[[package]]
+name = "flowy-net"
+version = "0.1.0"
+dependencies = [
+ "flowy-derive",
+ "protobuf",
+]
+
 [[package]]
 name = "flowy-sdk"
 version = "0.1.0"
@@ -1396,6 +1405,7 @@ dependencies = [
  "flowy-collaboration",
  "flowy-database",
  "flowy-derive",
+ "flowy-net",
  "flowy-user-infra",
  "futures-core",
  "lazy_static",

+ 1 - 1
frontend/app_flowy/packages/flowy_sdk/lib/dispatch/dispatch.dart

@@ -3,11 +3,11 @@ import 'package:dartz/dartz.dart';
 import 'package:flowy_log/flowy_log.dart';
 // ignore: unnecessary_import
 import 'package:flowy_sdk/protobuf/dart-ffi/ffi_response.pb.dart';
+import 'package:flowy_sdk/protobuf/flowy-net/network_state.pb.dart';
 import 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart';
 import 'package:flowy_sdk/protobuf/flowy-user/event.pb.dart';
 import 'package:flowy_sdk/protobuf/flowy-core/errors.pb.dart';
 import 'package:flowy_sdk/protobuf/flowy-core/event.pb.dart';
-import 'package:flowy_sdk/protobuf/lib-infra/network_state.pb.dart';
 import 'package:isolates/isolates.dart';
 import 'package:isolates/ports.dart';
 import 'package:ffi/ffi.dart';

+ 0 - 0
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/network_state.pb.dart → frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pb.dart


+ 0 - 0
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/network_state.pbenum.dart → frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pbenum.dart


+ 0 - 0
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/network_state.pbjson.dart → frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pbjson.dart


+ 0 - 0
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/network_state.pbserver.dart → frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/network_state.pbserver.dart


+ 2 - 0
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/protobuf.dart

@@ -0,0 +1,2 @@
+// Auto-generated, do not edit 
+export './network_state.pb.dart';

+ 0 - 167
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pb.dart

@@ -1,167 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: kv.proto
-//
-// @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
-
-import 'dart:core' as $core;
-
-import 'package:fixnum/fixnum.dart' as $fixnum;
-import 'package:protobuf/protobuf.dart' as $pb;
-
-enum KeyValue_OneOfStrValue {
-  strValue, 
-  notSet
-}
-
-enum KeyValue_OneOfIntValue {
-  intValue, 
-  notSet
-}
-
-enum KeyValue_OneOfFloatValue {
-  floatValue, 
-  notSet
-}
-
-enum KeyValue_OneOfBoolValue {
-  boolValue, 
-  notSet
-}
-
-class KeyValue extends $pb.GeneratedMessage {
-  static const $core.Map<$core.int, KeyValue_OneOfStrValue> _KeyValue_OneOfStrValueByTag = {
-    2 : KeyValue_OneOfStrValue.strValue,
-    0 : KeyValue_OneOfStrValue.notSet
-  };
-  static const $core.Map<$core.int, KeyValue_OneOfIntValue> _KeyValue_OneOfIntValueByTag = {
-    3 : KeyValue_OneOfIntValue.intValue,
-    0 : KeyValue_OneOfIntValue.notSet
-  };
-  static const $core.Map<$core.int, KeyValue_OneOfFloatValue> _KeyValue_OneOfFloatValueByTag = {
-    4 : KeyValue_OneOfFloatValue.floatValue,
-    0 : KeyValue_OneOfFloatValue.notSet
-  };
-  static const $core.Map<$core.int, KeyValue_OneOfBoolValue> _KeyValue_OneOfBoolValueByTag = {
-    5 : KeyValue_OneOfBoolValue.boolValue,
-    0 : KeyValue_OneOfBoolValue.notSet
-  };
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'KeyValue', createEmptyInstance: create)
-    ..oo(0, [2])
-    ..oo(1, [3])
-    ..oo(2, [4])
-    ..oo(3, [5])
-    ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'key')
-    ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'strValue')
-    ..aInt64(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'intValue')
-    ..a<$core.double>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'floatValue', $pb.PbFieldType.OD)
-    ..aOB(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'boolValue')
-    ..hasRequiredFields = false
-  ;
-
-  KeyValue._() : super();
-  factory KeyValue({
-    $core.String? key,
-    $core.String? strValue,
-    $fixnum.Int64? intValue,
-    $core.double? floatValue,
-    $core.bool? boolValue,
-  }) {
-    final _result = create();
-    if (key != null) {
-      _result.key = key;
-    }
-    if (strValue != null) {
-      _result.strValue = strValue;
-    }
-    if (intValue != null) {
-      _result.intValue = intValue;
-    }
-    if (floatValue != null) {
-      _result.floatValue = floatValue;
-    }
-    if (boolValue != null) {
-      _result.boolValue = boolValue;
-    }
-    return _result;
-  }
-  factory KeyValue.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
-  factory KeyValue.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
-  @$core.Deprecated(
-  'Using this can add significant overhead to your binary. '
-  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-  'Will be removed in next major version')
-  KeyValue clone() => KeyValue()..mergeFromMessage(this);
-  @$core.Deprecated(
-  'Using this can add significant overhead to your binary. '
-  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-  'Will be removed in next major version')
-  KeyValue copyWith(void Function(KeyValue) updates) => super.copyWith((message) => updates(message as KeyValue)) as KeyValue; // ignore: deprecated_member_use
-  $pb.BuilderInfo get info_ => _i;
-  @$core.pragma('dart2js:noInline')
-  static KeyValue create() => KeyValue._();
-  KeyValue createEmptyInstance() => create();
-  static $pb.PbList<KeyValue> createRepeated() => $pb.PbList<KeyValue>();
-  @$core.pragma('dart2js:noInline')
-  static KeyValue getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<KeyValue>(create);
-  static KeyValue? _defaultInstance;
-
-  KeyValue_OneOfStrValue whichOneOfStrValue() => _KeyValue_OneOfStrValueByTag[$_whichOneof(0)]!;
-  void clearOneOfStrValue() => clearField($_whichOneof(0));
-
-  KeyValue_OneOfIntValue whichOneOfIntValue() => _KeyValue_OneOfIntValueByTag[$_whichOneof(1)]!;
-  void clearOneOfIntValue() => clearField($_whichOneof(1));
-
-  KeyValue_OneOfFloatValue whichOneOfFloatValue() => _KeyValue_OneOfFloatValueByTag[$_whichOneof(2)]!;
-  void clearOneOfFloatValue() => clearField($_whichOneof(2));
-
-  KeyValue_OneOfBoolValue whichOneOfBoolValue() => _KeyValue_OneOfBoolValueByTag[$_whichOneof(3)]!;
-  void clearOneOfBoolValue() => clearField($_whichOneof(3));
-
-  @$pb.TagNumber(1)
-  $core.String get key => $_getSZ(0);
-  @$pb.TagNumber(1)
-  set key($core.String v) { $_setString(0, v); }
-  @$pb.TagNumber(1)
-  $core.bool hasKey() => $_has(0);
-  @$pb.TagNumber(1)
-  void clearKey() => clearField(1);
-
-  @$pb.TagNumber(2)
-  $core.String get strValue => $_getSZ(1);
-  @$pb.TagNumber(2)
-  set strValue($core.String v) { $_setString(1, v); }
-  @$pb.TagNumber(2)
-  $core.bool hasStrValue() => $_has(1);
-  @$pb.TagNumber(2)
-  void clearStrValue() => clearField(2);
-
-  @$pb.TagNumber(3)
-  $fixnum.Int64 get intValue => $_getI64(2);
-  @$pb.TagNumber(3)
-  set intValue($fixnum.Int64 v) { $_setInt64(2, v); }
-  @$pb.TagNumber(3)
-  $core.bool hasIntValue() => $_has(2);
-  @$pb.TagNumber(3)
-  void clearIntValue() => clearField(3);
-
-  @$pb.TagNumber(4)
-  $core.double get floatValue => $_getN(3);
-  @$pb.TagNumber(4)
-  set floatValue($core.double v) { $_setDouble(3, v); }
-  @$pb.TagNumber(4)
-  $core.bool hasFloatValue() => $_has(3);
-  @$pb.TagNumber(4)
-  void clearFloatValue() => clearField(4);
-
-  @$pb.TagNumber(5)
-  $core.bool get boolValue => $_getBF(4);
-  @$pb.TagNumber(5)
-  set boolValue($core.bool v) { $_setBool(4, v); }
-  @$pb.TagNumber(5)
-  $core.bool hasBoolValue() => $_has(4);
-  @$pb.TagNumber(5)
-  void clearBoolValue() => clearField(5);
-}
-

+ 0 - 7
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pbenum.dart

@@ -1,7 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: kv.proto
-//
-// @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
-

+ 0 - 30
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pbjson.dart

@@ -1,30 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: kv.proto
-//
-// @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
-
-import 'dart:core' as $core;
-import 'dart:convert' as $convert;
-import 'dart:typed_data' as $typed_data;
-@$core.Deprecated('Use keyValueDescriptor instead')
-const KeyValue$json = const {
-  '1': 'KeyValue',
-  '2': const [
-    const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
-    const {'1': 'str_value', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'strValue'},
-    const {'1': 'int_value', '3': 3, '4': 1, '5': 3, '9': 1, '10': 'intValue'},
-    const {'1': 'float_value', '3': 4, '4': 1, '5': 1, '9': 2, '10': 'floatValue'},
-    const {'1': 'bool_value', '3': 5, '4': 1, '5': 8, '9': 3, '10': 'boolValue'},
-  ],
-  '8': const [
-    const {'1': 'one_of_str_value'},
-    const {'1': 'one_of_int_value'},
-    const {'1': 'one_of_float_value'},
-    const {'1': 'one_of_bool_value'},
-  ],
-};
-
-/// Descriptor for `KeyValue`. Decode as a `google.protobuf.DescriptorProto`.
-final $typed_data.Uint8List keyValueDescriptor = $convert.base64Decode('CghLZXlWYWx1ZRIQCgNrZXkYASABKAlSA2tleRIdCglzdHJfdmFsdWUYAiABKAlIAFIIc3RyVmFsdWUSHQoJaW50X3ZhbHVlGAMgASgDSAFSCGludFZhbHVlEiEKC2Zsb2F0X3ZhbHVlGAQgASgBSAJSCmZsb2F0VmFsdWUSHwoKYm9vbF92YWx1ZRgFIAEoCEgDUglib29sVmFsdWVCEgoQb25lX29mX3N0cl92YWx1ZUISChBvbmVfb2ZfaW50X3ZhbHVlQhQKEm9uZV9vZl9mbG9hdF92YWx1ZUITChFvbmVfb2ZfYm9vbF92YWx1ZQ==');

+ 0 - 9
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/kv.pbserver.dart

@@ -1,9 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: kv.proto
-//
-// @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
-
-export 'kv.pb.dart';
-

+ 0 - 2
frontend/app_flowy/packages/flowy_sdk/lib/protobuf/lib-infra/protobuf.dart

@@ -1,3 +1 @@
 // Auto-generated, do not edit 
-export './kv.pb.dart';
-export './network_state.pb.dart';

+ 1 - 0
frontend/rust-lib/Cargo.toml

@@ -3,6 +3,7 @@ members = [
   "lib-dispatch",
   "lib-log",
   "lib-infra",
+  "flowy-net",
   "flowy-sdk",
   "dart-ffi",
   "flowy-user",

+ 1 - 0
frontend/rust-lib/flowy-core/Cargo.toml

@@ -16,6 +16,7 @@ backend-service = { path = "../../../shared-lib/backend-service" }
 
 flowy-document = { path = "../flowy-document" }
 flowy-database = { path = "../flowy-database" }
+flowy-net = { path = "../flowy-net" }
 dart-notify = { path = "../dart-notify" }
 lib-dispatch = { path = "../lib-dispatch" }
 lib-infra = { path = "../lib-infra" }

+ 1 - 1
frontend/rust-lib/flowy-core/src/core/core_context.rs

@@ -8,8 +8,8 @@ use crate::{
 use chrono::Utc;
 use flowy_collaboration::{entities::doc::DocDelta, user_default::initial_read_me};
 use flowy_core_infra::user_default;
+use flowy_net::entities::NetworkType;
 use lazy_static::lazy_static;
-use lib_infra::entities::network_state::NetworkType;
 use parking_lot::RwLock;
 use std::{collections::HashMap, sync::Arc};
 lazy_static! {

+ 10 - 0
frontend/rust-lib/flowy-net/Cargo.toml

@@ -0,0 +1,10 @@
+[package]
+name = "flowy-net"
+version = "0.1.0"
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+flowy-derive = { path = "../../../shared-lib/flowy-derive" }
+protobuf = {version = "2.18.0"}

+ 2 - 0
frontend/rust-lib/flowy-net/Flowy.toml

@@ -0,0 +1,2 @@
+proto_crates = ["src/entities"]
+event_files = []

+ 2 - 0
frontend/rust-lib/flowy-net/src/entities/mod.rs

@@ -0,0 +1,2 @@
+mod network_state;
+pub use network_state::*;

+ 0 - 0
frontend/rust-lib/lib-infra/src/entities/network_state.rs → frontend/rust-lib/flowy-net/src/entities/network_state.rs


+ 2 - 0
frontend/rust-lib/flowy-net/src/lib.rs

@@ -0,0 +1,2 @@
+pub mod entities;
+pub mod protobuf;

+ 0 - 0
frontend/rust-lib/lib-infra/src/protobuf/mod.rs → frontend/rust-lib/flowy-net/src/protobuf/mod.rs


+ 0 - 3
frontend/rust-lib/lib-infra/src/protobuf/model/mod.rs → frontend/rust-lib/flowy-net/src/protobuf/model/mod.rs

@@ -1,8 +1,5 @@
 #![cfg_attr(rustfmt, rustfmt::skip)]
 // Auto-generated, do not edit
 
-mod kv;
-pub use kv::*;
-
 mod network_state;
 pub use network_state::*;

+ 15 - 15
frontend/rust-lib/lib-infra/src/protobuf/model/network_state.rs → frontend/rust-lib/flowy-net/src/protobuf/model/network_state.rs

@@ -231,21 +231,21 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     \n\x13network_state.proto\",\n\x0cNetworkState\x12\x1c\n\x02ty\x18\x01\
     \x20\x01(\x0e2\x0c.NetworkTypeR\x02ty*G\n\x0bNetworkType\x12\x16\n\x12Un\
     knownNetworkType\x10\0\x12\x08\n\x04Wifi\x10\x01\x12\x08\n\x04Cell\x10\
-    \x02\x12\x0c\n\x08Ethernet\x10\x03J\x9d\x02\n\x06\x12\x04\0\0\n\x01\n\
-    \x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\n\
-    \n\x03\x04\0\x01\x12\x03\x02\x08\x14\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\
-    \x04\x17\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x03\x04\x0f\n\x0c\n\x05\x04\
-    \0\x02\0\x01\x12\x03\x03\x10\x12\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\
-    \x15\x16\n\n\n\x02\x05\0\x12\x04\x05\0\n\x01\n\n\n\x03\x05\0\x01\x12\x03\
-    \x05\x05\x10\n\x0b\n\x04\x05\0\x02\0\x12\x03\x06\x04\x1b\n\x0c\n\x05\x05\
-    \0\x02\0\x01\x12\x03\x06\x04\x16\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x06\
-    \x19\x1a\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x07\x04\r\n\x0c\n\x05\x05\0\
-    \x02\x01\x01\x12\x03\x07\x04\x08\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\
-    \x07\x0b\x0c\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x08\x04\r\n\x0c\n\x05\x05\
-    \0\x02\x02\x01\x12\x03\x08\x04\x08\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\
-    \x08\x0b\x0c\n\x0b\n\x04\x05\0\x02\x03\x12\x03\t\x04\x11\n\x0c\n\x05\x05\
-    \0\x02\x03\x01\x12\x03\t\x04\x0c\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\t\
-    \x0f\x10b\x06proto3\
+    \x02\x12\x0c\n\x08Ethernet\x10\x03J\x9d\x02\n\x06\x12\x04\0\0\t\x01\n\
+    \x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x01\0\x03\x01\n\n\
+    \n\x03\x04\0\x01\x12\x03\x01\x08\x14\n\x0b\n\x04\x04\0\x02\0\x12\x03\x02\
+    \x04\x17\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x02\x04\x0f\n\x0c\n\x05\x04\
+    \0\x02\0\x01\x12\x03\x02\x10\x12\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x02\
+    \x15\x16\n\n\n\x02\x05\0\x12\x04\x04\0\t\x01\n\n\n\x03\x05\0\x01\x12\x03\
+    \x04\x05\x10\n\x0b\n\x04\x05\0\x02\0\x12\x03\x05\x04\x1b\n\x0c\n\x05\x05\
+    \0\x02\0\x01\x12\x03\x05\x04\x16\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x05\
+    \x19\x1a\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x06\x04\r\n\x0c\n\x05\x05\0\
+    \x02\x01\x01\x12\x03\x06\x04\x08\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\
+    \x06\x0b\x0c\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x07\x04\r\n\x0c\n\x05\x05\
+    \0\x02\x02\x01\x12\x03\x07\x04\x08\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\
+    \x07\x0b\x0c\n\x0b\n\x04\x05\0\x02\x03\x12\x03\x08\x04\x11\n\x0c\n\x05\
+    \x05\0\x02\x03\x01\x12\x03\x08\x04\x0c\n\x0c\n\x05\x05\0\x02\x03\x02\x12\
+    \x03\x08\x0f\x10b\x06proto3\
 ";
 
 static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

+ 0 - 1
frontend/rust-lib/lib-infra/src/protobuf/proto/network_state.proto → frontend/rust-lib/flowy-net/src/protobuf/proto/network_state.proto

@@ -1,5 +1,4 @@
 syntax = "proto3";
-
 message NetworkState {
     NetworkType ty = 1;
 }

+ 1 - 0
frontend/rust-lib/flowy-user/Cargo.toml

@@ -15,6 +15,7 @@ lib-sqlite = { path = "../../../shared-lib/lib-sqlite" }
 
 derive_more = {version = "0.99", features = ["display"]}
 flowy-database = { path = "../flowy-database" }
+flowy-net = { path = "../flowy-net" }
 dart-notify = { path = "../dart-notify" }
 lib-dispatch = { path = "../lib-dispatch" }
 lib-infra = { path = "../lib-infra" }

+ 1 - 1
frontend/rust-lib/flowy-user/src/handlers/user_handler.rs

@@ -1,6 +1,6 @@
 use crate::{entities::*, errors::UserError, services::user::UserSession};
+use flowy_net::entities::NetworkState;
 use lib_dispatch::prelude::*;
-use lib_infra::entities::network_state::NetworkState;
 use std::{convert::TryInto, sync::Arc};
 
 #[tracing::instrument(skip(session))]

+ 1 - 1
frontend/rust-lib/flowy-user/src/services/user/notifier.rs

@@ -1,5 +1,5 @@
 use crate::entities::{UserProfile, UserStatus};
-use lib_infra::entities::network_state::NetworkType;
+use flowy_net::entities::NetworkType;
 use tokio::sync::{broadcast, mpsc};
 
 pub struct UserNotifier {

+ 1 - 1
frontend/rust-lib/flowy-user/src/services/user/user_session.rs

@@ -14,7 +14,6 @@ use flowy_database::{
     UserDatabaseConnection,
 };
 use flowy_user_infra::entities::{SignInResponse, SignUpResponse};
-use lib_infra::entities::network_state::NetworkState;
 use lib_sqlite::ConnectionPool;
 use lib_ws::{WsConnectState, WsMessageHandler};
 
@@ -32,6 +31,7 @@ use crate::{
     },
     sql_tables::{UserTable, UserTableChangeset},
 };
+use flowy_net::entities::NetworkState;
 
 pub struct UserSessionConfig {
     root_dir: String,

+ 2 - 1
frontend/rust-lib/flowy-user/src/services/user/ws_manager.rs

@@ -1,6 +1,7 @@
 use crate::errors::UserError;
 
-use lib_infra::{entities::network_state::NetworkType, future::ResultFuture};
+use flowy_net::entities::NetworkType;
+use lib_infra::future::ResultFuture;
 use lib_ws::{WsConnectState, WsController, WsMessage, WsMessageHandler, WsSender};
 use parking_lot::RwLock;
 use std::sync::Arc;

+ 0 - 2
frontend/rust-lib/lib-infra/Flowy.toml

@@ -1,2 +0,0 @@
-proto_crates = ["src/kv", "src/entities"]
-event_files = []

+ 0 - 1
frontend/rust-lib/lib-infra/src/entities/mod.rs

@@ -1 +0,0 @@
-pub mod network_state;

+ 0 - 2
frontend/rust-lib/lib-infra/src/lib.rs

@@ -1,6 +1,4 @@
-pub mod entities;
 pub mod future;
-mod protobuf;
 pub mod retry;
 
 #[allow(dead_code)]

+ 0 - 478
frontend/rust-lib/lib-infra/src/protobuf/model/kv.rs

@@ -1,478 +0,0 @@
-// This file is generated by rust-protobuf 2.22.1. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![allow(unused_attributes)]
-#![cfg_attr(rustfmt, rustfmt::skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `kv.proto`
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_22_1;
-
-#[derive(PartialEq,Clone,Default)]
-pub struct KeyValue {
-    // message fields
-    pub key: ::std::string::String,
-    // message oneof groups
-    pub one_of_str_value: ::std::option::Option<KeyValue_oneof_one_of_str_value>,
-    pub one_of_int_value: ::std::option::Option<KeyValue_oneof_one_of_int_value>,
-    pub one_of_float_value: ::std::option::Option<KeyValue_oneof_one_of_float_value>,
-    pub one_of_bool_value: ::std::option::Option<KeyValue_oneof_one_of_bool_value>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a KeyValue {
-    fn default() -> &'a KeyValue {
-        <KeyValue as ::protobuf::Message>::default_instance()
-    }
-}
-
-#[derive(Clone,PartialEq,Debug)]
-pub enum KeyValue_oneof_one_of_str_value {
-    str_value(::std::string::String),
-}
-
-#[derive(Clone,PartialEq,Debug)]
-pub enum KeyValue_oneof_one_of_int_value {
-    int_value(i64),
-}
-
-#[derive(Clone,PartialEq,Debug)]
-pub enum KeyValue_oneof_one_of_float_value {
-    float_value(f64),
-}
-
-#[derive(Clone,PartialEq,Debug)]
-pub enum KeyValue_oneof_one_of_bool_value {
-    bool_value(bool),
-}
-
-impl KeyValue {
-    pub fn new() -> KeyValue {
-        ::std::default::Default::default()
-    }
-
-    // string key = 1;
-
-
-    pub fn get_key(&self) -> &str {
-        &self.key
-    }
-    pub fn clear_key(&mut self) {
-        self.key.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_key(&mut self, v: ::std::string::String) {
-        self.key = v;
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_key(&mut self) -> &mut ::std::string::String {
-        &mut self.key
-    }
-
-    // Take field
-    pub fn take_key(&mut self) -> ::std::string::String {
-        ::std::mem::replace(&mut self.key, ::std::string::String::new())
-    }
-
-    // string str_value = 2;
-
-
-    pub fn get_str_value(&self) -> &str {
-        match self.one_of_str_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(ref v)) => v,
-            _ => "",
-        }
-    }
-    pub fn clear_str_value(&mut self) {
-        self.one_of_str_value = ::std::option::Option::None;
-    }
-
-    pub fn has_str_value(&self) -> bool {
-        match self.one_of_str_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(..)) => true,
-            _ => false,
-        }
-    }
-
-    // Param is passed by value, moved
-    pub fn set_str_value(&mut self, v: ::std::string::String) {
-        self.one_of_str_value = ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(v))
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_str_value(&mut self) -> &mut ::std::string::String {
-        if let ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(_)) = self.one_of_str_value {
-        } else {
-            self.one_of_str_value = ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(::std::string::String::new()));
-        }
-        match self.one_of_str_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(ref mut v)) => v,
-            _ => panic!(),
-        }
-    }
-
-    // Take field
-    pub fn take_str_value(&mut self) -> ::std::string::String {
-        if self.has_str_value() {
-            match self.one_of_str_value.take() {
-                ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(v)) => v,
-                _ => panic!(),
-            }
-        } else {
-            ::std::string::String::new()
-        }
-    }
-
-    // int64 int_value = 3;
-
-
-    pub fn get_int_value(&self) -> i64 {
-        match self.one_of_int_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_int_value::int_value(v)) => v,
-            _ => 0,
-        }
-    }
-    pub fn clear_int_value(&mut self) {
-        self.one_of_int_value = ::std::option::Option::None;
-    }
-
-    pub fn has_int_value(&self) -> bool {
-        match self.one_of_int_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_int_value::int_value(..)) => true,
-            _ => false,
-        }
-    }
-
-    // Param is passed by value, moved
-    pub fn set_int_value(&mut self, v: i64) {
-        self.one_of_int_value = ::std::option::Option::Some(KeyValue_oneof_one_of_int_value::int_value(v))
-    }
-
-    // double float_value = 4;
-
-
-    pub fn get_float_value(&self) -> f64 {
-        match self.one_of_float_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_float_value::float_value(v)) => v,
-            _ => 0.,
-        }
-    }
-    pub fn clear_float_value(&mut self) {
-        self.one_of_float_value = ::std::option::Option::None;
-    }
-
-    pub fn has_float_value(&self) -> bool {
-        match self.one_of_float_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_float_value::float_value(..)) => true,
-            _ => false,
-        }
-    }
-
-    // Param is passed by value, moved
-    pub fn set_float_value(&mut self, v: f64) {
-        self.one_of_float_value = ::std::option::Option::Some(KeyValue_oneof_one_of_float_value::float_value(v))
-    }
-
-    // bool bool_value = 5;
-
-
-    pub fn get_bool_value(&self) -> bool {
-        match self.one_of_bool_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_bool_value::bool_value(v)) => v,
-            _ => false,
-        }
-    }
-    pub fn clear_bool_value(&mut self) {
-        self.one_of_bool_value = ::std::option::Option::None;
-    }
-
-    pub fn has_bool_value(&self) -> bool {
-        match self.one_of_bool_value {
-            ::std::option::Option::Some(KeyValue_oneof_one_of_bool_value::bool_value(..)) => true,
-            _ => false,
-        }
-    }
-
-    // Param is passed by value, moved
-    pub fn set_bool_value(&mut self, v: bool) {
-        self.one_of_bool_value = ::std::option::Option::Some(KeyValue_oneof_one_of_bool_value::bool_value(v))
-    }
-}
-
-impl ::protobuf::Message for KeyValue {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.key)?;
-                },
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
-                    }
-                    self.one_of_str_value = ::std::option::Option::Some(KeyValue_oneof_one_of_str_value::str_value(is.read_string()?));
-                },
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
-                    }
-                    self.one_of_int_value = ::std::option::Option::Some(KeyValue_oneof_one_of_int_value::int_value(is.read_int64()?));
-                },
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeFixed64 {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
-                    }
-                    self.one_of_float_value = ::std::option::Option::Some(KeyValue_oneof_one_of_float_value::float_value(is.read_double()?));
-                },
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
-                    }
-                    self.one_of_bool_value = ::std::option::Option::Some(KeyValue_oneof_one_of_bool_value::bool_value(is.read_bool()?));
-                },
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
-                },
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if !self.key.is_empty() {
-            my_size += ::protobuf::rt::string_size(1, &self.key);
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_str_value {
-            match v {
-                &KeyValue_oneof_one_of_str_value::str_value(ref v) => {
-                    my_size += ::protobuf::rt::string_size(2, &v);
-                },
-            };
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_int_value {
-            match v {
-                &KeyValue_oneof_one_of_int_value::int_value(v) => {
-                    my_size += ::protobuf::rt::value_size(3, v, ::protobuf::wire_format::WireTypeVarint);
-                },
-            };
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_float_value {
-            match v {
-                &KeyValue_oneof_one_of_float_value::float_value(v) => {
-                    my_size += 9;
-                },
-            };
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_bool_value {
-            match v {
-                &KeyValue_oneof_one_of_bool_value::bool_value(v) => {
-                    my_size += 2;
-                },
-            };
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
-        if !self.key.is_empty() {
-            os.write_string(1, &self.key)?;
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_str_value {
-            match v {
-                &KeyValue_oneof_one_of_str_value::str_value(ref v) => {
-                    os.write_string(2, v)?;
-                },
-            };
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_int_value {
-            match v {
-                &KeyValue_oneof_one_of_int_value::int_value(v) => {
-                    os.write_int64(3, v)?;
-                },
-            };
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_float_value {
-            match v {
-                &KeyValue_oneof_one_of_float_value::float_value(v) => {
-                    os.write_double(4, v)?;
-                },
-            };
-        }
-        if let ::std::option::Option::Some(ref v) = self.one_of_bool_value {
-            match v {
-                &KeyValue_oneof_one_of_bool_value::bool_value(v) => {
-                    os.write_bool(5, v)?;
-                },
-            };
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> KeyValue {
-        KeyValue::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
-        descriptor.get(|| {
-            let mut fields = ::std::vec::Vec::new();
-            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
-                "key",
-                |m: &KeyValue| { &m.key },
-                |m: &mut KeyValue| { &mut m.key },
-            ));
-            fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
-                "str_value",
-                KeyValue::has_str_value,
-                KeyValue::get_str_value,
-            ));
-            fields.push(::protobuf::reflect::accessor::make_singular_i64_accessor::<_>(
-                "int_value",
-                KeyValue::has_int_value,
-                KeyValue::get_int_value,
-            ));
-            fields.push(::protobuf::reflect::accessor::make_singular_f64_accessor::<_>(
-                "float_value",
-                KeyValue::has_float_value,
-                KeyValue::get_float_value,
-            ));
-            fields.push(::protobuf::reflect::accessor::make_singular_bool_accessor::<_>(
-                "bool_value",
-                KeyValue::has_bool_value,
-                KeyValue::get_bool_value,
-            ));
-            ::protobuf::reflect::MessageDescriptor::new_pb_name::<KeyValue>(
-                "KeyValue",
-                fields,
-                file_descriptor_proto()
-            )
-        })
-    }
-
-    fn default_instance() -> &'static KeyValue {
-        static instance: ::protobuf::rt::LazyV2<KeyValue> = ::protobuf::rt::LazyV2::INIT;
-        instance.get(KeyValue::new)
-    }
-}
-
-impl ::protobuf::Clear for KeyValue {
-    fn clear(&mut self) {
-        self.key.clear();
-        self.one_of_str_value = ::std::option::Option::None;
-        self.one_of_int_value = ::std::option::Option::None;
-        self.one_of_float_value = ::std::option::Option::None;
-        self.one_of_bool_value = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for KeyValue {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for KeyValue {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x08kv.proto\"\xf1\x01\n\x08KeyValue\x12\x10\n\x03key\x18\x01\x20\x01(\
-    \tR\x03key\x12\x1d\n\tstr_value\x18\x02\x20\x01(\tH\0R\x08strValue\x12\
-    \x1d\n\tint_value\x18\x03\x20\x01(\x03H\x01R\x08intValue\x12!\n\x0bfloat\
-    _value\x18\x04\x20\x01(\x01H\x02R\nfloatValue\x12\x1f\n\nbool_value\x18\
-    \x05\x20\x01(\x08H\x03R\tboolValueB\x12\n\x10one_of_str_valueB\x12\n\x10\
-    one_of_int_valueB\x14\n\x12one_of_float_valueB\x13\n\x11one_of_bool_valu\
-    eJ\xa9\x03\n\x06\x12\x04\0\0\x08\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\
-    \n\x02\x04\0\x12\x04\x02\0\x08\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\x08\
-    \x10\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x13\n\x0c\n\x05\x04\0\x02\0\
-    \x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x0b\x0e\n\
-    \x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x11\x12\n\x0b\n\x04\x04\0\x08\0\
-    \x12\x03\x04\x044\n\x0c\n\x05\x04\0\x08\0\x01\x12\x03\x04\n\x1a\n\x0b\n\
-    \x04\x04\0\x02\x01\x12\x03\x04\x1d2\n\x0c\n\x05\x04\0\x02\x01\x05\x12\
-    \x03\x04\x1d#\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x04$-\n\x0c\n\x05\
-    \x04\0\x02\x01\x03\x12\x03\x0401\n\x0b\n\x04\x04\0\x08\x01\x12\x03\x05\
-    \x043\n\x0c\n\x05\x04\0\x08\x01\x01\x12\x03\x05\n\x1a\n\x0b\n\x04\x04\0\
-    \x02\x02\x12\x03\x05\x1d1\n\x0c\n\x05\x04\0\x02\x02\x05\x12\x03\x05\x1d\
-    \"\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x05#,\n\x0c\n\x05\x04\0\x02\x02\
-    \x03\x12\x03\x05/0\n\x0b\n\x04\x04\0\x08\x02\x12\x03\x06\x048\n\x0c\n\
-    \x05\x04\0\x08\x02\x01\x12\x03\x06\n\x1c\n\x0b\n\x04\x04\0\x02\x03\x12\
-    \x03\x06\x1f6\n\x0c\n\x05\x04\0\x02\x03\x05\x12\x03\x06\x1f%\n\x0c\n\x05\
-    \x04\0\x02\x03\x01\x12\x03\x06&1\n\x0c\n\x05\x04\0\x02\x03\x03\x12\x03\
-    \x0645\n\x0b\n\x04\x04\0\x08\x03\x12\x03\x07\x044\n\x0c\n\x05\x04\0\x08\
-    \x03\x01\x12\x03\x07\n\x1b\n\x0b\n\x04\x04\0\x02\x04\x12\x03\x07\x1e2\n\
-    \x0c\n\x05\x04\0\x02\x04\x05\x12\x03\x07\x1e\"\n\x0c\n\x05\x04\0\x02\x04\
-    \x01\x12\x03\x07#-\n\x0c\n\x05\x04\0\x02\x04\x03\x12\x03\x0701b\x06proto\
-    3\
-";
-
-static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    file_descriptor_proto_lazy.get(|| {
-        parse_descriptor_proto()
-    })
-}

+ 0 - 9
frontend/rust-lib/lib-infra/src/protobuf/proto/kv.proto

@@ -1,9 +0,0 @@
-syntax = "proto3";
-
-message KeyValue {
-    string key = 1;
-    oneof one_of_str_value { string str_value = 2; };
-    oneof one_of_int_value { int64 int_value = 3; };
-    oneof one_of_float_value { double float_value = 4; };
-    oneof one_of_bool_value { bool bool_value = 5; };
-}

+ 1 - 1
frontend/scripts/flowy-tool/src/util/file.rs

@@ -10,7 +10,7 @@ use tera::Tera;
 use walkdir::WalkDir;
 
 pub fn read_file(path: &str) -> Option<String> {
-    let mut file = File::open(path).expect("Unable to open file");
+    let mut file = File::open(path).expect(&format!("Unable to open file at {}", path));
     let mut content = String::new();
     match file.read_to_string(&mut content) {
         Ok(_) => Some(content),

+ 4 - 5
shared-lib/flowy-derive/src/derive_cache/derive_cache.rs

@@ -16,13 +16,12 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
         "HashMap" => TypeCategory::Map,
         "u8" => TypeCategory::Bytes,
         "String" => TypeCategory::Str,
-        "KeyValue"
-        | "NetworkState"
-        | "WorkspaceError"
+        "WorkspaceError"
         | "DocError"
         | "FFIRequest"
         | "FFIResponse"
         | "SubscribeObject"
+        | "NetworkState"
         | "UserError"
         | "QueryAppRequest"
         | "AppIdentifier"
@@ -80,12 +79,12 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
         | "UpdateUserRequest"
         | "UpdateUserParams"
         => TypeCategory::Protobuf,
-        "NetworkType"
-        | "WorkspaceEvent"
+        "WorkspaceEvent"
         | "WorkspaceNotification"
         | "ErrorCode"
         | "DocObservable"
         | "FFIStatusCode"
+        | "NetworkType"
         | "UserEvent"
         | "UserNotification"
         | "TrashType"