refactor flowy-document & config server api

This commit is contained in:
appflowy 2021-09-09 15:43:05 +08:00
parent 0a82601eac
commit a5a07944dc
67 changed files with 1475 additions and 1425 deletions

View File

@ -35,7 +35,7 @@ class HomeScreen extends StatelessWidget {
state.map( state.map(
loading: (_) {}, loading: (_) {},
unauthorized: (unauthorized) { unauthorized: (unauthorized) {
// // TODO: push to login screen when user token was invalid
}, },
); );
}, },

View File

@ -12,31 +12,21 @@ import 'package:protobuf/protobuf.dart' as $pb;
class CreateDocRequest extends $pb.GeneratedMessage { class CreateDocRequest extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateDocRequest', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateDocRequest', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name') ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data')
..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'desc')
..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'text')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
CreateDocRequest._() : super(); CreateDocRequest._() : super();
factory CreateDocRequest({ factory CreateDocRequest({
$core.String? id, $core.String? id,
$core.String? name, $core.String? data,
$core.String? desc,
$core.String? text,
}) { }) {
final _result = create(); final _result = create();
if (id != null) { if (id != null) {
_result.id = id; _result.id = id;
} }
if (name != null) { if (data != null) {
_result.name = name; _result.data = data;
}
if (desc != null) {
_result.desc = desc;
}
if (text != null) {
_result.text = text;
} }
return _result; return _result;
} }
@ -71,84 +61,56 @@ class CreateDocRequest extends $pb.GeneratedMessage {
void clearId() => clearField(1); void clearId() => clearField(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
$core.String get name => $_getSZ(1); $core.String get data => $_getSZ(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
set name($core.String v) { $_setString(1, v); } set data($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2) @$pb.TagNumber(2)
$core.bool hasName() => $_has(1); $core.bool hasData() => $_has(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
void clearName() => clearField(2); void clearData() => clearField(2);
@$pb.TagNumber(3)
$core.String get desc => $_getSZ(2);
@$pb.TagNumber(3)
set desc($core.String v) { $_setString(2, v); }
@$pb.TagNumber(3)
$core.bool hasDesc() => $_has(2);
@$pb.TagNumber(3)
void clearDesc() => clearField(3);
@$pb.TagNumber(4)
$core.String get text => $_getSZ(3);
@$pb.TagNumber(4)
set text($core.String v) { $_setString(3, v); }
@$pb.TagNumber(4)
$core.bool hasText() => $_has(3);
@$pb.TagNumber(4)
void clearText() => clearField(4);
} }
class DocInfo extends $pb.GeneratedMessage { class CreateDocParams extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DocInfo', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateDocParams', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name') ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data')
..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'desc')
..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'path')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
DocInfo._() : super(); CreateDocParams._() : super();
factory DocInfo({ factory CreateDocParams({
$core.String? id, $core.String? id,
$core.String? name, $core.String? data,
$core.String? desc,
$core.String? path,
}) { }) {
final _result = create(); final _result = create();
if (id != null) { if (id != null) {
_result.id = id; _result.id = id;
} }
if (name != null) { if (data != null) {
_result.name = name; _result.data = data;
}
if (desc != null) {
_result.desc = desc;
}
if (path != null) {
_result.path = path;
} }
return _result; return _result;
} }
factory DocInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); factory CreateDocParams.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory DocInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); factory CreateDocParams.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
DocInfo clone() => DocInfo()..mergeFromMessage(this); CreateDocParams clone() => CreateDocParams()..mergeFromMessage(this);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
DocInfo copyWith(void Function(DocInfo) updates) => super.copyWith((message) => updates(message as DocInfo)) as DocInfo; // ignore: deprecated_member_use CreateDocParams copyWith(void Function(CreateDocParams) updates) => super.copyWith((message) => updates(message as CreateDocParams)) as CreateDocParams; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i; $pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static DocInfo create() => DocInfo._(); static CreateDocParams create() => CreateDocParams._();
DocInfo createEmptyInstance() => create(); CreateDocParams createEmptyInstance() => create();
static $pb.PbList<DocInfo> createRepeated() => $pb.PbList<DocInfo>(); static $pb.PbList<CreateDocParams> createRepeated() => $pb.PbList<CreateDocParams>();
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static DocInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DocInfo>(create); static CreateDocParams getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<CreateDocParams>(create);
static DocInfo? _defaultInstance; static CreateDocParams? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.String get id => $_getSZ(0); $core.String get id => $_getSZ(0);
@ -160,77 +122,73 @@ class DocInfo extends $pb.GeneratedMessage {
void clearId() => clearField(1); void clearId() => clearField(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
$core.String get name => $_getSZ(1); $core.String get data => $_getSZ(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
set name($core.String v) { $_setString(1, v); } set data($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2) @$pb.TagNumber(2)
$core.bool hasName() => $_has(1); $core.bool hasData() => $_has(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
void clearName() => clearField(2); void clearData() => clearField(2);
@$pb.TagNumber(3)
$core.String get desc => $_getSZ(2);
@$pb.TagNumber(3)
set desc($core.String v) { $_setString(2, v); }
@$pb.TagNumber(3)
$core.bool hasDesc() => $_has(2);
@$pb.TagNumber(3)
void clearDesc() => clearField(3);
@$pb.TagNumber(4)
$core.String get path => $_getSZ(3);
@$pb.TagNumber(4)
set path($core.String v) { $_setString(3, v); }
@$pb.TagNumber(4)
$core.bool hasPath() => $_has(3);
@$pb.TagNumber(4)
void clearPath() => clearField(4);
} }
class DocData extends $pb.GeneratedMessage { class Doc extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DocData', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Doc', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'text') ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
DocData._() : super(); Doc._() : super();
factory DocData({ factory Doc({
$core.String? text, $core.String? id,
$core.String? data,
}) { }) {
final _result = create(); final _result = create();
if (text != null) { if (id != null) {
_result.text = text; _result.id = id;
}
if (data != null) {
_result.data = data;
} }
return _result; return _result;
} }
factory DocData.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); factory Doc.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory DocData.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); factory Doc.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
DocData clone() => DocData()..mergeFromMessage(this); Doc clone() => Doc()..mergeFromMessage(this);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
DocData copyWith(void Function(DocData) updates) => super.copyWith((message) => updates(message as DocData)) as DocData; // ignore: deprecated_member_use Doc copyWith(void Function(Doc) updates) => super.copyWith((message) => updates(message as Doc)) as Doc; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i; $pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static DocData create() => DocData._(); static Doc create() => Doc._();
DocData createEmptyInstance() => create(); Doc createEmptyInstance() => create();
static $pb.PbList<DocData> createRepeated() => $pb.PbList<DocData>(); static $pb.PbList<Doc> createRepeated() => $pb.PbList<Doc>();
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static DocData getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DocData>(create); static Doc getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Doc>(create);
static DocData? _defaultInstance; static Doc? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.String get text => $_getSZ(0); $core.String get id => $_getSZ(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)
set text($core.String v) { $_setString(0, v); } set id($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.bool hasText() => $_has(0); $core.bool hasId() => $_has(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)
void clearText() => clearField(1); void clearId() => clearField(1);
@$pb.TagNumber(2)
$core.String get data => $_getSZ(1);
@$pb.TagNumber(2)
set data($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasData() => $_has(1);
@$pb.TagNumber(2)
void clearData() => clearField(2);
} }

View File

@ -13,34 +13,31 @@ const CreateDocRequest$json = const {
'1': 'CreateDocRequest', '1': 'CreateDocRequest',
'2': const [ '2': const [
const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
const {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'}, const {'1': 'data', '3': 2, '4': 1, '5': 9, '10': 'data'},
const {'1': 'desc', '3': 3, '4': 1, '5': 9, '10': 'desc'},
const {'1': 'text', '3': 4, '4': 1, '5': 9, '10': 'text'},
], ],
}; };
/// Descriptor for `CreateDocRequest`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `CreateDocRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List createDocRequestDescriptor = $convert.base64Decode('ChBDcmVhdGVEb2NSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhIKBGRlc2MYAyABKAlSBGRlc2MSEgoEdGV4dBgEIAEoCVIEdGV4dA=='); final $typed_data.Uint8List createDocRequestDescriptor = $convert.base64Decode('ChBDcmVhdGVEb2NSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBISCgRkYXRhGAIgASgJUgRkYXRh');
@$core.Deprecated('Use docInfoDescriptor instead') @$core.Deprecated('Use createDocParamsDescriptor instead')
const DocInfo$json = const { const CreateDocParams$json = const {
'1': 'DocInfo', '1': 'CreateDocParams',
'2': const [ '2': const [
const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
const {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'}, const {'1': 'data', '3': 2, '4': 1, '5': 9, '10': 'data'},
const {'1': 'desc', '3': 3, '4': 1, '5': 9, '10': 'desc'},
const {'1': 'path', '3': 4, '4': 1, '5': 9, '10': 'path'},
], ],
}; };
/// Descriptor for `DocInfo`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `CreateDocParams`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List docInfoDescriptor = $convert.base64Decode('CgdEb2NJbmZvEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhIKBGRlc2MYAyABKAlSBGRlc2MSEgoEcGF0aBgEIAEoCVIEcGF0aA=='); final $typed_data.Uint8List createDocParamsDescriptor = $convert.base64Decode('Cg9DcmVhdGVEb2NQYXJhbXMSDgoCaWQYASABKAlSAmlkEhIKBGRhdGEYAiABKAlSBGRhdGE=');
@$core.Deprecated('Use docDataDescriptor instead') @$core.Deprecated('Use docDescriptor instead')
const DocData$json = const { const Doc$json = const {
'1': 'DocData', '1': 'Doc',
'2': const [ '2': const [
const {'1': 'text', '3': 1, '4': 1, '5': 9, '10': 'text'}, const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
const {'1': 'data', '3': 2, '4': 1, '5': 9, '10': 'data'},
], ],
}; };
/// Descriptor for `DocData`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `Doc`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List docDataDescriptor = $convert.base64Decode('CgdEb2NEYXRhEhIKBHRleHQYASABKAlSBHRleHQ='); final $typed_data.Uint8List docDescriptor = $convert.base64Decode('CgNEb2MSDgoCaWQYASABKAlSAmlkEhIKBGRhdGEYAiABKAlSBGRhdGE=');

View File

@ -9,64 +9,34 @@ import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb; import 'package:protobuf/protobuf.dart' as $pb;
enum UpdateDocRequest_OneOfName { enum UpdateDocRequest_OneOfData {
name, data,
notSet
}
enum UpdateDocRequest_OneOfDesc {
desc,
notSet
}
enum UpdateDocRequest_OneOfText {
text,
notSet notSet
} }
class UpdateDocRequest extends $pb.GeneratedMessage { class UpdateDocRequest extends $pb.GeneratedMessage {
static const $core.Map<$core.int, UpdateDocRequest_OneOfName> _UpdateDocRequest_OneOfNameByTag = { static const $core.Map<$core.int, UpdateDocRequest_OneOfData> _UpdateDocRequest_OneOfDataByTag = {
2 : UpdateDocRequest_OneOfName.name, 2 : UpdateDocRequest_OneOfData.data,
0 : UpdateDocRequest_OneOfName.notSet 0 : UpdateDocRequest_OneOfData.notSet
};
static const $core.Map<$core.int, UpdateDocRequest_OneOfDesc> _UpdateDocRequest_OneOfDescByTag = {
3 : UpdateDocRequest_OneOfDesc.desc,
0 : UpdateDocRequest_OneOfDesc.notSet
};
static const $core.Map<$core.int, UpdateDocRequest_OneOfText> _UpdateDocRequest_OneOfTextByTag = {
4 : UpdateDocRequest_OneOfText.text,
0 : UpdateDocRequest_OneOfText.notSet
}; };
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UpdateDocRequest', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UpdateDocRequest', createEmptyInstance: create)
..oo(0, [2]) ..oo(0, [2])
..oo(1, [3])
..oo(2, [4])
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name') ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data')
..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'desc')
..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'text')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
UpdateDocRequest._() : super(); UpdateDocRequest._() : super();
factory UpdateDocRequest({ factory UpdateDocRequest({
$core.String? id, $core.String? id,
$core.String? name, $core.String? data,
$core.String? desc,
$core.String? text,
}) { }) {
final _result = create(); final _result = create();
if (id != null) { if (id != null) {
_result.id = id; _result.id = id;
} }
if (name != null) { if (data != null) {
_result.name = name; _result.data = data;
}
if (desc != null) {
_result.desc = desc;
}
if (text != null) {
_result.text = text;
} }
return _result; return _result;
} }
@ -91,14 +61,8 @@ class UpdateDocRequest extends $pb.GeneratedMessage {
static UpdateDocRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<UpdateDocRequest>(create); static UpdateDocRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<UpdateDocRequest>(create);
static UpdateDocRequest? _defaultInstance; static UpdateDocRequest? _defaultInstance;
UpdateDocRequest_OneOfName whichOneOfName() => _UpdateDocRequest_OneOfNameByTag[$_whichOneof(0)]!; UpdateDocRequest_OneOfData whichOneOfData() => _UpdateDocRequest_OneOfDataByTag[$_whichOneof(0)]!;
void clearOneOfName() => clearField($_whichOneof(0)); void clearOneOfData() => clearField($_whichOneof(0));
UpdateDocRequest_OneOfDesc whichOneOfDesc() => _UpdateDocRequest_OneOfDescByTag[$_whichOneof(1)]!;
void clearOneOfDesc() => clearField($_whichOneof(1));
UpdateDocRequest_OneOfText whichOneOfText() => _UpdateDocRequest_OneOfTextByTag[$_whichOneof(2)]!;
void clearOneOfText() => clearField($_whichOneof(2));
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.String get id => $_getSZ(0); $core.String get id => $_getSZ(0);
@ -110,30 +74,86 @@ class UpdateDocRequest extends $pb.GeneratedMessage {
void clearId() => clearField(1); void clearId() => clearField(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
$core.String get name => $_getSZ(1); $core.String get data => $_getSZ(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
set name($core.String v) { $_setString(1, v); } set data($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2) @$pb.TagNumber(2)
$core.bool hasName() => $_has(1); $core.bool hasData() => $_has(1);
@$pb.TagNumber(2) @$pb.TagNumber(2)
void clearName() => clearField(2); void clearData() => clearField(2);
}
@$pb.TagNumber(3)
$core.String get desc => $_getSZ(2); enum UpdateDocParams_OneOfData {
@$pb.TagNumber(3) data,
set desc($core.String v) { $_setString(2, v); } notSet
@$pb.TagNumber(3) }
$core.bool hasDesc() => $_has(2);
@$pb.TagNumber(3) class UpdateDocParams extends $pb.GeneratedMessage {
void clearDesc() => clearField(3); static const $core.Map<$core.int, UpdateDocParams_OneOfData> _UpdateDocParams_OneOfDataByTag = {
2 : UpdateDocParams_OneOfData.data,
@$pb.TagNumber(4) 0 : UpdateDocParams_OneOfData.notSet
$core.String get text => $_getSZ(3); };
@$pb.TagNumber(4) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UpdateDocParams', createEmptyInstance: create)
set text($core.String v) { $_setString(3, v); } ..oo(0, [2])
@$pb.TagNumber(4) ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id')
$core.bool hasText() => $_has(3); ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data')
@$pb.TagNumber(4) ..hasRequiredFields = false
void clearText() => clearField(4); ;
UpdateDocParams._() : super();
factory UpdateDocParams({
$core.String? id,
$core.String? data,
}) {
final _result = create();
if (id != null) {
_result.id = id;
}
if (data != null) {
_result.data = data;
}
return _result;
}
factory UpdateDocParams.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory UpdateDocParams.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')
UpdateDocParams clone() => UpdateDocParams()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
UpdateDocParams copyWith(void Function(UpdateDocParams) updates) => super.copyWith((message) => updates(message as UpdateDocParams)) as UpdateDocParams; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static UpdateDocParams create() => UpdateDocParams._();
UpdateDocParams createEmptyInstance() => create();
static $pb.PbList<UpdateDocParams> createRepeated() => $pb.PbList<UpdateDocParams>();
@$core.pragma('dart2js:noInline')
static UpdateDocParams getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<UpdateDocParams>(create);
static UpdateDocParams? _defaultInstance;
UpdateDocParams_OneOfData whichOneOfData() => _UpdateDocParams_OneOfDataByTag[$_whichOneof(0)]!;
void clearOneOfData() => clearField($_whichOneof(0));
@$pb.TagNumber(1)
$core.String get id => $_getSZ(0);
@$pb.TagNumber(1)
set id($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasId() => $_has(0);
@$pb.TagNumber(1)
void clearId() => clearField(1);
@$pb.TagNumber(2)
$core.String get data => $_getSZ(1);
@$pb.TagNumber(2)
set data($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasData() => $_has(1);
@$pb.TagNumber(2)
void clearData() => clearField(2);
} }

View File

@ -13,16 +13,26 @@ const UpdateDocRequest$json = const {
'1': 'UpdateDocRequest', '1': 'UpdateDocRequest',
'2': const [ '2': const [
const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
const {'1': 'name', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'name'}, const {'1': 'data', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'data'},
const {'1': 'desc', '3': 3, '4': 1, '5': 9, '9': 1, '10': 'desc'},
const {'1': 'text', '3': 4, '4': 1, '5': 9, '9': 2, '10': 'text'},
], ],
'8': const [ '8': const [
const {'1': 'one_of_name'}, const {'1': 'one_of_data'},
const {'1': 'one_of_desc'},
const {'1': 'one_of_text'},
], ],
}; };
/// Descriptor for `UpdateDocRequest`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `UpdateDocRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List updateDocRequestDescriptor = $convert.base64Decode('ChBVcGRhdGVEb2NSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIUCgRuYW1lGAIgASgJSABSBG5hbWUSFAoEZGVzYxgDIAEoCUgBUgRkZXNjEhQKBHRleHQYBCABKAlIAlIEdGV4dEINCgtvbmVfb2ZfbmFtZUINCgtvbmVfb2ZfZGVzY0INCgtvbmVfb2ZfdGV4dA=='); final $typed_data.Uint8List updateDocRequestDescriptor = $convert.base64Decode('ChBVcGRhdGVEb2NSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIUCgRkYXRhGAIgASgJSABSBGRhdGFCDQoLb25lX29mX2RhdGE=');
@$core.Deprecated('Use updateDocParamsDescriptor instead')
const UpdateDocParams$json = const {
'1': 'UpdateDocParams',
'2': const [
const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
const {'1': 'data', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'data'},
],
'8': const [
const {'1': 'one_of_data'},
],
};
/// Descriptor for `UpdateDocParams`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List updateDocParamsDescriptor = $convert.base64Decode('Cg9VcGRhdGVEb2NQYXJhbXMSDgoCaWQYASABKAlSAmlkEhQKBGRhdGEYAiABKAlIAFIEZGF0YUINCgtvbmVfb2ZfZGF0YQ==');

View File

@ -56,47 +56,42 @@ class QueryDocRequest extends $pb.GeneratedMessage {
void clearDocId() => clearField(1); void clearDocId() => clearField(1);
} }
class QueryDocDataRequest extends $pb.GeneratedMessage { class QueryDocParams extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryDocDataRequest', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryDocParams', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'docId') ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'docId')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'path')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
QueryDocDataRequest._() : super(); QueryDocParams._() : super();
factory QueryDocDataRequest({ factory QueryDocParams({
$core.String? docId, $core.String? docId,
$core.String? path,
}) { }) {
final _result = create(); final _result = create();
if (docId != null) { if (docId != null) {
_result.docId = docId; _result.docId = docId;
} }
if (path != null) {
_result.path = path;
}
return _result; return _result;
} }
factory QueryDocDataRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); factory QueryDocParams.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory QueryDocDataRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); factory QueryDocParams.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
QueryDocDataRequest clone() => QueryDocDataRequest()..mergeFromMessage(this); QueryDocParams clone() => QueryDocParams()..mergeFromMessage(this);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
QueryDocDataRequest copyWith(void Function(QueryDocDataRequest) updates) => super.copyWith((message) => updates(message as QueryDocDataRequest)) as QueryDocDataRequest; // ignore: deprecated_member_use QueryDocParams copyWith(void Function(QueryDocParams) updates) => super.copyWith((message) => updates(message as QueryDocParams)) as QueryDocParams; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i; $pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static QueryDocDataRequest create() => QueryDocDataRequest._(); static QueryDocParams create() => QueryDocParams._();
QueryDocDataRequest createEmptyInstance() => create(); QueryDocParams createEmptyInstance() => create();
static $pb.PbList<QueryDocDataRequest> createRepeated() => $pb.PbList<QueryDocDataRequest>(); static $pb.PbList<QueryDocParams> createRepeated() => $pb.PbList<QueryDocParams>();
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static QueryDocDataRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<QueryDocDataRequest>(create); static QueryDocParams getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<QueryDocParams>(create);
static QueryDocDataRequest? _defaultInstance; static QueryDocParams? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.String get docId => $_getSZ(0); $core.String get docId => $_getSZ(0);
@ -106,14 +101,5 @@ class QueryDocDataRequest extends $pb.GeneratedMessage {
$core.bool hasDocId() => $_has(0); $core.bool hasDocId() => $_has(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)
void clearDocId() => clearField(1); void clearDocId() => clearField(1);
@$pb.TagNumber(2)
$core.String get path => $_getSZ(1);
@$pb.TagNumber(2)
set path($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasPath() => $_has(1);
@$pb.TagNumber(2)
void clearPath() => clearField(2);
} }

View File

@ -18,14 +18,13 @@ const QueryDocRequest$json = const {
/// Descriptor for `QueryDocRequest`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `QueryDocRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List queryDocRequestDescriptor = $convert.base64Decode('Cg9RdWVyeURvY1JlcXVlc3QSFQoGZG9jX2lkGAEgASgJUgVkb2NJZA=='); final $typed_data.Uint8List queryDocRequestDescriptor = $convert.base64Decode('Cg9RdWVyeURvY1JlcXVlc3QSFQoGZG9jX2lkGAEgASgJUgVkb2NJZA==');
@$core.Deprecated('Use queryDocDataRequestDescriptor instead') @$core.Deprecated('Use queryDocParamsDescriptor instead')
const QueryDocDataRequest$json = const { const QueryDocParams$json = const {
'1': 'QueryDocDataRequest', '1': 'QueryDocParams',
'2': const [ '2': const [
const {'1': 'doc_id', '3': 1, '4': 1, '5': 9, '10': 'docId'}, const {'1': 'doc_id', '3': 1, '4': 1, '5': 9, '10': 'docId'},
const {'1': 'path', '3': 2, '4': 1, '5': 9, '10': 'path'},
], ],
}; };
/// Descriptor for `QueryDocDataRequest`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `QueryDocParams`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List queryDocDataRequestDescriptor = $convert.base64Decode('ChNRdWVyeURvY0RhdGFSZXF1ZXN0EhUKBmRvY19pZBgBIAEoCVIFZG9jSWQSEgoEcGF0aBgCIAEoCVIEcGF0aA=='); final $typed_data.Uint8List queryDocParamsDescriptor = $convert.base64Decode('Cg5RdWVyeURvY1BhcmFtcxIVCgZkb2NfaWQYASABKAlSBWRvY0lk');

View File

@ -15,14 +15,14 @@ export 'errors.pbenum.dart';
class DocError extends $pb.GeneratedMessage { class DocError extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DocError', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DocError', createEmptyInstance: create)
..e<DocErrorCode>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'code', $pb.PbFieldType.OE, defaultOrMaker: DocErrorCode.Unknown, valueOf: DocErrorCode.valueOf, enumValues: DocErrorCode.values) ..e<ErrorCode>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'code', $pb.PbFieldType.OE, defaultOrMaker: ErrorCode.DocIdInvalid, valueOf: ErrorCode.valueOf, enumValues: ErrorCode.values)
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'msg') ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'msg')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
DocError._() : super(); DocError._() : super();
factory DocError({ factory DocError({
DocErrorCode? code, ErrorCode? code,
$core.String? msg, $core.String? msg,
}) { }) {
final _result = create(); final _result = create();
@ -56,9 +56,9 @@ class DocError extends $pb.GeneratedMessage {
static DocError? _defaultInstance; static DocError? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
DocErrorCode get code => $_getN(0); ErrorCode get code => $_getN(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)
set code(DocErrorCode v) { setField(1, v); } set code(ErrorCode v) { setField(1, v); }
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.bool hasCode() => $_has(0); $core.bool hasCode() => $_has(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)

View File

@ -9,32 +9,22 @@
import 'dart:core' as $core; import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb; import 'package:protobuf/protobuf.dart' as $pb;
class DocErrorCode extends $pb.ProtobufEnum { class ErrorCode extends $pb.ProtobufEnum {
static const DocErrorCode Unknown = DocErrorCode._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'Unknown'); static const ErrorCode DocIdInvalid = ErrorCode._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocIdInvalid');
static const DocErrorCode EditorDBInternalError = DocErrorCode._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'EditorDBInternalError'); static const ErrorCode DocNotfound = ErrorCode._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocNotfound');
static const DocErrorCode EditorDBConnFailed = DocErrorCode._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'EditorDBConnFailed'); static const ErrorCode UserUnauthorized = ErrorCode._(999, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UserUnauthorized');
static const DocErrorCode DocNameInvalid = DocErrorCode._(10, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocNameInvalid'); static const ErrorCode InternalError = ErrorCode._(1000, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'InternalError');
static const DocErrorCode DocViewIdInvalid = DocErrorCode._(11, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocViewIdInvalid');
static const DocErrorCode DocDescTooLong = DocErrorCode._(12, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocDescTooLong');
static const DocErrorCode DocOpenFileError = DocErrorCode._(13, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocOpenFileError');
static const DocErrorCode DocFilePathInvalid = DocErrorCode._(14, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DocFilePathInvalid');
static const DocErrorCode EditorUserNotLoginYet = DocErrorCode._(100, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'EditorUserNotLoginYet');
static const $core.List<DocErrorCode> values = <DocErrorCode> [ static const $core.List<ErrorCode> values = <ErrorCode> [
Unknown, DocIdInvalid,
EditorDBInternalError, DocNotfound,
EditorDBConnFailed, UserUnauthorized,
DocNameInvalid, InternalError,
DocViewIdInvalid,
DocDescTooLong,
DocOpenFileError,
DocFilePathInvalid,
EditorUserNotLoginYet,
]; ];
static final $core.Map<$core.int, DocErrorCode> _byValue = $pb.ProtobufEnum.initByValue(values); static final $core.Map<$core.int, ErrorCode> _byValue = $pb.ProtobufEnum.initByValue(values);
static DocErrorCode? valueOf($core.int value) => _byValue[value]; static ErrorCode? valueOf($core.int value) => _byValue[value];
const DocErrorCode._($core.int v, $core.String n) : super(v, n); const ErrorCode._($core.int v, $core.String n) : super(v, n);
} }

View File

@ -8,32 +8,27 @@
import 'dart:core' as $core; import 'dart:core' as $core;
import 'dart:convert' as $convert; import 'dart:convert' as $convert;
import 'dart:typed_data' as $typed_data; import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use docErrorCodeDescriptor instead') @$core.Deprecated('Use errorCodeDescriptor instead')
const DocErrorCode$json = const { const ErrorCode$json = const {
'1': 'DocErrorCode', '1': 'ErrorCode',
'2': const [ '2': const [
const {'1': 'Unknown', '2': 0}, const {'1': 'DocIdInvalid', '2': 0},
const {'1': 'EditorDBInternalError', '2': 1}, const {'1': 'DocNotfound', '2': 1},
const {'1': 'EditorDBConnFailed', '2': 2}, const {'1': 'UserUnauthorized', '2': 999},
const {'1': 'DocNameInvalid', '2': 10}, const {'1': 'InternalError', '2': 1000},
const {'1': 'DocViewIdInvalid', '2': 11},
const {'1': 'DocDescTooLong', '2': 12},
const {'1': 'DocOpenFileError', '2': 13},
const {'1': 'DocFilePathInvalid', '2': 14},
const {'1': 'EditorUserNotLoginYet', '2': 100},
], ],
}; };
/// Descriptor for `DocErrorCode`. Decode as a `google.protobuf.EnumDescriptorProto`. /// Descriptor for `ErrorCode`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List docErrorCodeDescriptor = $convert.base64Decode('CgxEb2NFcnJvckNvZGUSCwoHVW5rbm93bhAAEhkKFUVkaXRvckRCSW50ZXJuYWxFcnJvchABEhYKEkVkaXRvckRCQ29ubkZhaWxlZBACEhIKDkRvY05hbWVJbnZhbGlkEAoSFAoQRG9jVmlld0lkSW52YWxpZBALEhIKDkRvY0Rlc2NUb29Mb25nEAwSFAoQRG9jT3BlbkZpbGVFcnJvchANEhYKEkRvY0ZpbGVQYXRoSW52YWxpZBAOEhkKFUVkaXRvclVzZXJOb3RMb2dpbllldBBk'); final $typed_data.Uint8List errorCodeDescriptor = $convert.base64Decode('CglFcnJvckNvZGUSEAoMRG9jSWRJbnZhbGlkEAASDwoLRG9jTm90Zm91bmQQARIVChBVc2VyVW5hdXRob3JpemVkEOcHEhIKDUludGVybmFsRXJyb3IQ6Ac=');
@$core.Deprecated('Use docErrorDescriptor instead') @$core.Deprecated('Use docErrorDescriptor instead')
const DocError$json = const { const DocError$json = const {
'1': 'DocError', '1': 'DocError',
'2': const [ '2': const [
const {'1': 'code', '3': 1, '4': 1, '5': 14, '6': '.DocErrorCode', '10': 'code'}, const {'1': 'code', '3': 1, '4': 1, '5': 14, '6': '.ErrorCode', '10': 'code'},
const {'1': 'msg', '3': 2, '4': 1, '5': 9, '10': 'msg'}, const {'1': 'msg', '3': 2, '4': 1, '5': 9, '10': 'msg'},
], ],
}; };
/// Descriptor for `DocError`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `DocError`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List docErrorDescriptor = $convert.base64Decode('CghEb2NFcnJvchIhCgRjb2RlGAEgASgOMg0uRG9jRXJyb3JDb2RlUgRjb2RlEhAKA21zZxgCIAEoCVIDbXNn'); final $typed_data.Uint8List docErrorDescriptor = $convert.base64Decode('CghEb2NFcnJvchIeCgRjb2RlGAEgASgOMgouRXJyb3JDb2RlUgRjb2RlEhAKA21zZxgCIAEoCVIDbXNn');

View File

@ -12,14 +12,14 @@ import 'package:protobuf/protobuf.dart' as $pb;
class EditorEvent extends $pb.ProtobufEnum { class EditorEvent extends $pb.ProtobufEnum {
static const EditorEvent CreateDoc = EditorEvent._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CreateDoc'); static const EditorEvent CreateDoc = EditorEvent._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CreateDoc');
static const EditorEvent UpdateDoc = EditorEvent._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UpdateDoc'); static const EditorEvent UpdateDoc = EditorEvent._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UpdateDoc');
static const EditorEvent ReadDocInfo = EditorEvent._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ReadDocInfo'); static const EditorEvent ReadDoc = EditorEvent._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ReadDoc');
static const EditorEvent ReadDocData = EditorEvent._(3, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ReadDocData'); static const EditorEvent DeleteDoc = EditorEvent._(3, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DeleteDoc');
static const $core.List<EditorEvent> values = <EditorEvent> [ static const $core.List<EditorEvent> values = <EditorEvent> [
CreateDoc, CreateDoc,
UpdateDoc, UpdateDoc,
ReadDocInfo, ReadDoc,
ReadDocData, DeleteDoc,
]; ];
static final $core.Map<$core.int, EditorEvent> _byValue = $pb.ProtobufEnum.initByValue(values); static final $core.Map<$core.int, EditorEvent> _byValue = $pb.ProtobufEnum.initByValue(values);

View File

@ -14,10 +14,10 @@ const EditorEvent$json = const {
'2': const [ '2': const [
const {'1': 'CreateDoc', '2': 0}, const {'1': 'CreateDoc', '2': 0},
const {'1': 'UpdateDoc', '2': 1}, const {'1': 'UpdateDoc', '2': 1},
const {'1': 'ReadDocInfo', '2': 2}, const {'1': 'ReadDoc', '2': 2},
const {'1': 'ReadDocData', '2': 3}, const {'1': 'DeleteDoc', '2': 3},
], ],
}; };
/// Descriptor for `EditorEvent`. Decode as a `google.protobuf.EnumDescriptorProto`. /// Descriptor for `EditorEvent`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List editorEventDescriptor = $convert.base64Decode('CgtFZGl0b3JFdmVudBINCglDcmVhdGVEb2MQABINCglVcGRhdGVEb2MQARIPCgtSZWFkRG9jSW5mbxACEg8KC1JlYWREb2NEYXRhEAM='); final $typed_data.Uint8List editorEventDescriptor = $convert.base64Decode('CgtFZGl0b3JFdmVudBINCglDcmVhdGVEb2MQABINCglVcGRhdGVEb2MQARILCgdSZWFkRG9jEAISDQoJRGVsZXRlRG9jEAM=');

View File

@ -0,0 +1,11 @@
///
// Generated code. Do not modify.
// source: observable.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;
export 'observable.pbenum.dart';

View File

@ -0,0 +1,24 @@
///
// Generated code. Do not modify.
// source: observable.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
// ignore_for_file: UNDEFINED_SHOWN_NAME
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class DocObservable extends $pb.ProtobufEnum {
static const DocObservable UserCreateDoc = DocObservable._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UserCreateDoc');
static const $core.List<DocObservable> values = <DocObservable> [
UserCreateDoc,
];
static final $core.Map<$core.int, DocObservable> _byValue = $pb.ProtobufEnum.initByValue(values);
static DocObservable? valueOf($core.int value) => _byValue[value];
const DocObservable._($core.int v, $core.String n) : super(v, n);
}

View File

@ -0,0 +1,20 @@
///
// Generated code. Do not modify.
// source: observable.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 docObservableDescriptor instead')
const DocObservable$json = const {
'1': 'DocObservable',
'2': const [
const {'1': 'UserCreateDoc', '2': 0},
],
};
/// Descriptor for `DocObservable`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List docObservableDescriptor = $convert.base64Decode('Cg1Eb2NPYnNlcnZhYmxlEhEKDVVzZXJDcmVhdGVEb2MQAA==');

View File

@ -0,0 +1,9 @@
///
// Generated code. Do not modify.
// source: observable.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 'observable.pb.dart';

View File

@ -1,6 +1,7 @@
// Auto-generated, do not edit // Auto-generated, do not edit
export './doc_modify.pb.dart'; export './doc_modify.pb.dart';
export './doc_create.pb.dart'; export './doc_create.pb.dart';
export './observable.pb.dart';
export './errors.pb.dart'; export './errors.pb.dart';
export './event.pb.dart'; export './event.pb.dart';
export './doc_query.pb.dart'; export './doc_query.pb.dart';

View File

@ -1,10 +1,6 @@
-- Your SQL goes here -- Your SQL goes here
CREATE TABLE doc_table ( CREATE TABLE doc_table (
id TEXT NOT NULL PRIMARY KEY, id TEXT NOT NULL PRIMARY KEY,
name TEXT NOT NULL DEFAULT '', data TEXT NOT NULL DEFAULT '',
desc TEXT NOT NULL DEFAULT '',
path TEXT NOT NULL DEFAULT '',
modified_time BIGINT NOT NULL DEFAULT 0,
create_time BIGINT NOT NULL DEFAULT 0,
version BIGINT NOT NULL DEFAULT 0 version BIGINT NOT NULL DEFAULT 0
); );

View File

@ -16,11 +16,7 @@ table! {
table! { table! {
doc_table (id) { doc_table (id) {
id -> Text, id -> Text,
name -> Text, data -> Text,
desc -> Text,
path -> Text,
modified_time -> BigInt,
create_time -> BigInt,
version -> BigInt, version -> BigInt,
} }
} }

View File

@ -51,11 +51,12 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
| "RepeatedView" | "RepeatedView"
| "WorkspaceError" | "WorkspaceError"
| "CreateDocRequest" | "CreateDocRequest"
| "DocInfo" | "CreateDocParams"
| "DocData" | "Doc"
| "QueryDocRequest" | "QueryDocRequest"
| "QueryDocDataRequest" | "QueryDocParams"
| "UpdateDocRequest" | "UpdateDocRequest"
| "UpdateDocParams"
| "DocError" | "DocError"
| "FFIRequest" | "FFIRequest"
| "FFIResponse" | "FFIResponse"
@ -76,7 +77,7 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
| "ErrorCode" | "ErrorCode"
| "WorkspaceObservable" | "WorkspaceObservable"
| "EditorEvent" | "EditorEvent"
| "DocErrorCode" | "DocObservable"
| "FFIStatusCode" | "FFIStatusCode"
| "UserStatus" | "UserStatus"
| "UserEvent" | "UserEvent"

View File

@ -1,3 +1,4 @@
[package] [package]
name = "flowy-document" name = "flowy-document"
version = "0.1.0" version = "0.1.0"
@ -12,6 +13,9 @@ flowy-log = { path = "../flowy-log" }
flowy-derive = { path = "../flowy-derive" } flowy-derive = { path = "../flowy-derive" }
flowy-database = { path = "../flowy-database" } flowy-database = { path = "../flowy-database" }
flowy-infra = { path = "../flowy-infra" } flowy-infra = { path = "../flowy-infra" }
flowy-observable = { path = "../flowy-observable" }
flowy-net = { path = "../flowy-net", features = ["flowy_request"] }
diesel = {version = "1.4.7", features = ["sqlite"]} diesel = {version = "1.4.7", features = ["sqlite"]}
diesel_derives = {version = "1.4.1", features = ["sqlite"]} diesel_derives = {version = "1.4.1", features = ["sqlite"]}
protobuf = {version = "2.18.0"} protobuf = {version = "2.18.0"}
@ -26,3 +30,6 @@ strum_macros = "0.21"
[dev-dependencies] [dev-dependencies]
flowy-test = { path = "../flowy-test" } flowy-test = { path = "../flowy-test" }
[features]
http_server = []

View File

@ -1,3 +1,3 @@
proto_crates = ["src/entities", "src/event.rs", "src/errors.rs"] proto_crates = ["src/entities", "src/event.rs", "src/errors.rs", "src/observable"]
event_files = ["src/event.rs"] event_files = ["src/event.rs"]

View File

@ -11,68 +11,35 @@ pub struct CreateDocRequest {
pub id: String, pub id: String,
#[pb(index = 2)] #[pb(index = 2)]
pub name: String, pub data: String,
#[pb(index = 3)]
pub desc: String,
#[pb(index = 4)]
pub text: String,
} }
#[derive(ProtoBuf, Default, Debug, Clone)]
pub struct CreateDocParams { pub struct CreateDocParams {
#[pb(index = 1)]
pub id: String, pub id: String,
pub name: String,
pub desc: String, #[pb(index = 2)]
pub text: String, pub data: String,
} }
impl TryInto<CreateDocParams> for CreateDocRequest { impl TryInto<CreateDocParams> for CreateDocRequest {
type Error = DocError; type Error = DocError;
fn try_into(self) -> Result<CreateDocParams, Self::Error> { fn try_into(self) -> Result<CreateDocParams, Self::Error> {
let name = DocName::parse(self.name)
.map_err(|e| {
ErrorBuilder::new(DocErrorCode::DocNameInvalid)
.msg(e)
.build()
})?
.0;
let id = DocViewId::parse(self.id) let id = DocViewId::parse(self.id)
.map_err(|e| { .map_err(|e| ErrorBuilder::new(ErrorCode::DocIdInvalid).msg(e).build())?
ErrorBuilder::new(DocErrorCode::DocViewIdInvalid)
.msg(e)
.build()
})?
.0; .0;
Ok(CreateDocParams { Ok(CreateDocParams { id, data: self.data })
id,
name,
desc: self.desc,
text: self.text,
})
} }
} }
#[derive(ProtoBuf, Default, Debug)] #[derive(ProtoBuf, Default, Debug, Clone)]
pub struct DocInfo { pub struct Doc {
#[pb(index = 1)] #[pb(index = 1)]
pub id: String, pub id: String,
#[pb(index = 2)] #[pb(index = 2)]
pub name: String, pub data: String,
#[pb(index = 3)]
pub desc: String,
#[pb(index = 4)]
pub path: String,
}
#[derive(ProtoBuf, Default, Debug)]
pub struct DocData {
#[pb(index = 1)]
pub text: String,
} }

View File

@ -8,20 +8,16 @@ pub struct UpdateDocRequest {
pub id: String, pub id: String,
#[pb(index = 2, one_of)] #[pb(index = 2, one_of)]
pub name: Option<String>, pub data: Option<String>,
#[pb(index = 3, one_of)]
pub desc: Option<String>,
#[pb(index = 4, one_of)]
pub text: Option<String>,
} }
pub(crate) struct UpdateDocParams { #[derive(ProtoBuf, Default, Debug, Clone)]
pub struct UpdateDocParams {
#[pb(index = 1)]
pub(crate) id: String, pub(crate) id: String,
pub(crate) name: Option<String>,
pub(crate) desc: Option<String>, #[pb(index = 2, one_of)]
pub(crate) text: Option<String>, pub(crate) data: Option<String>,
} }
impl TryInto<UpdateDocParams> for UpdateDocRequest { impl TryInto<UpdateDocParams> for UpdateDocRequest {
@ -29,44 +25,9 @@ impl TryInto<UpdateDocParams> for UpdateDocRequest {
fn try_into(self) -> Result<UpdateDocParams, Self::Error> { fn try_into(self) -> Result<UpdateDocParams, Self::Error> {
let id = DocId::parse(self.id) let id = DocId::parse(self.id)
.map_err(|e| { .map_err(|e| ErrorBuilder::new(ErrorCode::DocIdInvalid).msg(e).build())?
ErrorBuilder::new(DocErrorCode::DocViewIdInvalid)
.msg(e)
.build()
})?
.0; .0;
let name = match self.name { Ok(UpdateDocParams { id, data: self.data })
None => None,
Some(name) => Some(
DocName::parse(name)
.map_err(|e| {
ErrorBuilder::new(DocErrorCode::DocNameInvalid)
.msg(e)
.build()
})?
.0,
),
};
let desc = match self.desc {
None => None,
Some(desc) => Some(
DocDesc::parse(desc)
.map_err(|e| {
ErrorBuilder::new(DocErrorCode::DocDescTooLong)
.msg(e)
.build()
})?
.0,
),
};
Ok(UpdateDocParams {
id,
name,
desc,
text: self.text,
})
} }
} }

View File

@ -11,7 +11,9 @@ pub struct QueryDocRequest {
pub doc_id: String, pub doc_id: String,
} }
pub(crate) struct QueryDocParams { #[derive(ProtoBuf, Default, Debug, Clone)]
pub struct QueryDocParams {
#[pb(index = 1)]
pub doc_id: String, pub doc_id: String,
} }
@ -20,51 +22,9 @@ impl TryInto<QueryDocParams> for QueryDocRequest {
fn try_into(self) -> Result<QueryDocParams, Self::Error> { fn try_into(self) -> Result<QueryDocParams, Self::Error> {
let doc_id = DocId::parse(self.doc_id) let doc_id = DocId::parse(self.doc_id)
.map_err(|e| { .map_err(|e| ErrorBuilder::new(ErrorCode::DocIdInvalid).msg(e).build())?
ErrorBuilder::new(DocErrorCode::DocViewIdInvalid)
.msg(e)
.build()
})?
.0; .0;
Ok(QueryDocParams { doc_id }) Ok(QueryDocParams { doc_id })
} }
} }
#[derive(Default, ProtoBuf)]
pub struct QueryDocDataRequest {
#[pb(index = 1)]
pub doc_id: String,
#[pb(index = 2)]
pub path: String,
}
pub(crate) struct QueryDocDataParams {
pub doc_id: String,
pub path: String,
}
impl TryInto<QueryDocDataParams> for QueryDocDataRequest {
type Error = DocError;
fn try_into(self) -> Result<QueryDocDataParams, Self::Error> {
let doc_id = DocId::parse(self.doc_id)
.map_err(|e| {
ErrorBuilder::new(DocErrorCode::DocViewIdInvalid)
.msg(e)
.build()
})?
.0;
let path = DocPath::parse(self.path)
.map_err(|e| {
ErrorBuilder::new(DocErrorCode::DocFilePathInvalid)
.msg(e)
.build()
})?
.0;
Ok(QueryDocDataParams { doc_id, path })
}
}

View File

@ -3,61 +3,63 @@ use bytes::Bytes;
use derive_more::Display; use derive_more::Display;
use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
use flowy_dispatch::prelude::{EventResponse, ResponseBuilder}; use flowy_dispatch::prelude::{EventResponse, ResponseBuilder};
use std::convert::TryInto; use flowy_net::errors::ServerError;
use std::{convert::TryInto, fmt};
#[derive(Debug, Default, Clone, ProtoBuf)] #[derive(Debug, Default, Clone, ProtoBuf)]
pub struct DocError { pub struct DocError {
#[pb(index = 1)] #[pb(index = 1)]
pub code: DocErrorCode, pub code: ErrorCode,
#[pb(index = 2)] #[pb(index = 2)]
pub msg: String, pub msg: String,
} }
impl DocError { impl DocError {
fn new(code: DocErrorCode, msg: &str) -> Self { Self { code, msg: msg.to_owned() } } fn new(code: ErrorCode, msg: &str) -> Self { Self { code, msg: msg.to_owned() } }
} }
#[derive(Debug, Clone, ProtoBuf_Enum, Display, PartialEq, Eq)] #[derive(Debug, Clone, ProtoBuf_Enum, Display, PartialEq, Eq)]
pub enum DocErrorCode { pub enum ErrorCode {
#[display(fmt = "Unknown")] #[display(fmt = "DocIdInvalid")]
Unknown = 0, DocIdInvalid = 0,
#[display(fmt = "EditorDBInternalError")] #[display(fmt = "DocNotfound")]
EditorDBInternalError = 1, DocNotfound = 1,
#[display(fmt = "EditorDBConnFailed")] #[display(fmt = "UserUnauthorized")]
EditorDBConnFailed = 2, UserUnauthorized = 999,
#[display(fmt = "DocNameInvalid")] #[display(fmt = "InternalError")]
DocNameInvalid = 10, InternalError = 1000,
#[display(fmt = "DocViewIdInvalid")]
DocViewIdInvalid = 11,
#[display(fmt = "DocDescTooLong")]
DocDescTooLong = 12,
#[display(fmt = "DocOpenFileError")]
DocOpenFileError = 13,
#[display(fmt = "DocFilePathInvalid")]
DocFilePathInvalid = 14,
#[display(fmt = "EditorUserNotLoginYet")]
EditorUserNotLoginYet = 100,
} }
impl std::default::Default for DocErrorCode { impl std::default::Default for ErrorCode {
fn default() -> Self { DocErrorCode::Unknown } fn default() -> Self { ErrorCode::InternalError }
} }
impl std::convert::From<flowy_database::Error> for DocError { impl std::convert::From<flowy_database::Error> for DocError {
fn from(error: flowy_database::Error) -> Self { ErrorBuilder::new(DocErrorCode::EditorDBInternalError).error(error).build() } fn from(error: flowy_database::Error) -> Self { ErrorBuilder::new(ErrorCode::InternalError).error(error).build() }
} }
impl std::convert::From<FileError> for DocError { impl std::convert::From<FileError> for DocError {
fn from(error: FileError) -> Self { ErrorBuilder::new(DocErrorCode::DocOpenFileError).error(error).build() } fn from(error: FileError) -> Self { ErrorBuilder::new(ErrorCode::InternalError).error(error).build() }
}
impl std::convert::From<flowy_net::errors::ServerError> for DocError {
fn from(error: ServerError) -> Self {
let code = server_error_to_doc_error(error.code);
ErrorBuilder::new(code).error(error.msg).build()
}
}
use flowy_net::errors::ErrorCode as ServerErrorCode;
fn server_error_to_doc_error(code: ServerErrorCode) -> ErrorCode {
match code {
ServerErrorCode::UserUnauthorized => ErrorCode::UserUnauthorized,
ServerErrorCode::RecordNotFound => ErrorCode::DocNotfound,
_ => ErrorCode::InternalError,
}
} }
impl flowy_dispatch::Error for DocError { impl flowy_dispatch::Error for DocError {
@ -67,8 +69,11 @@ impl flowy_dispatch::Error for DocError {
} }
} }
pub type ErrorBuilder = flowy_infra::errors::Builder<DocErrorCode, DocError>; impl fmt::Display for DocError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}: {}", &self.code, &self.msg) }
impl flowy_infra::errors::Build<DocErrorCode> for DocError { }
fn build(code: DocErrorCode, msg: String) -> Self { DocError::new(code, &msg) }
pub type ErrorBuilder = flowy_infra::errors::Builder<ErrorCode, DocError>;
impl flowy_infra::errors::Build<ErrorCode> for DocError {
fn build(code: ErrorCode, msg: String) -> Self { DocError::new(code, &msg) }
} }

View File

@ -4,15 +4,15 @@ use strum_macros::Display;
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)] #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
#[event_err = "DocError"] #[event_err = "DocError"]
pub enum EditorEvent { pub enum EditorEvent {
#[event(input = "CreateDocRequest", output = "DocInfo")] #[event(input = "CreateDocRequest", output = "Doc")]
CreateDoc = 0, CreateDoc = 0,
#[event(input = "UpdateDocRequest")] #[event(input = "UpdateDocRequest")]
UpdateDoc = 1, UpdateDoc = 1,
#[event(input = "QueryDocRequest", output = "DocInfo")] #[event(input = "QueryDocRequest", output = "Doc")]
ReadDocInfo = 2, ReadDoc = 2,
#[event(input = "QueryDocDataRequest", output = "DocData")] #[event(input = "QueryDocRequest")]
ReadDocData = 3, DeleteDoc = 3,
} }

View File

@ -7,73 +7,29 @@ use flowy_dispatch::prelude::*;
use std::{convert::TryInto, path::Path}; use std::{convert::TryInto, path::Path};
use tokio::sync::RwLock; use tokio::sync::RwLock;
#[tracing::instrument(name = "create_doc", skip(data, controller, manager))] #[tracing::instrument(skip(data, controller))]
pub async fn create_doc( pub async fn create_doc_handler(data: Data<CreateDocRequest>, controller: Unit<DocController>) -> DataResult<Doc, DocError> {
data: Data<CreateDocRequest>,
controller: Unit<DocController>,
manager: Unit<RwLock<FileManager>>,
) -> DataResult<DocInfo, DocError> {
let params: CreateDocParams = data.into_inner().try_into()?; let params: CreateDocParams = data.into_inner().try_into()?;
let dir = manager.read().await.user.user_doc_dir()?; let doc_desc = controller.create_doc(params).await?;
let path = manager
.write()
.await
.create_file(&params.id, &dir, &params.text)?;
let doc_desc = controller
.create_doc(params, path.to_str().unwrap())
.await?;
data_result(doc_desc) data_result(doc_desc)
} }
#[tracing::instrument(name = "read_doc", skip(data, controller, manager))] #[tracing::instrument(skip(data, controller))]
pub async fn read_doc( pub async fn read_doc_handler(data: Data<QueryDocRequest>, controller: Unit<DocController>) -> DataResult<Doc, DocError> {
data: Data<QueryDocRequest>,
controller: Unit<DocController>,
manager: Unit<RwLock<FileManager>>,
) -> DataResult<DocInfo, DocError> {
let params: QueryDocParams = data.into_inner().try_into()?; let params: QueryDocParams = data.into_inner().try_into()?;
let doc_info = controller.read_doc(&params.doc_id).await?; let doc_info = controller.read_doc(params).await?;
let _ = manager
.write()
.await
.open(Path::new(&doc_info.path), doc_info.id.clone())?;
data_result(doc_info) data_result(doc_info)
} }
#[tracing::instrument(name = "read_doc_data", skip(data, manager))] #[tracing::instrument(skip(data, controller))]
pub async fn read_doc_data( pub async fn update_doc_handler(data: Data<UpdateDocRequest>, controller: Unit<DocController>) -> Result<(), DocError> {
data: Data<QueryDocDataRequest>,
manager: Unit<RwLock<FileManager>>,
) -> DataResult<DocData, DocError> {
let params: QueryDocDataParams = data.into_inner().try_into()?;
let text = manager
.write()
.await
.open(Path::new(&params.path), params.doc_id)?;
data_result(DocData { text })
}
pub async fn update_doc(
data: Data<UpdateDocRequest>,
controller: Unit<DocController>,
manager: Unit<RwLock<FileManager>>,
) -> Result<(), DocError> {
let mut params: UpdateDocParams = data.into_inner().try_into()?; let mut params: UpdateDocParams = data.into_inner().try_into()?;
if let Some(s) = params.text.take() {
let doc_desc = controller.read_doc(&params.id).await?;
manager
.write()
.await
.save(Path::new(&doc_desc.path), &s, params.id.clone())
.unwrap();
}
if params.name.is_some() || params.desc.is_some() {
let _ = controller.update_doc(params).await?; let _ = controller.update_doc(params).await?;
} Ok(())
}
pub async fn delete_doc_handler(data: Data<QueryDocRequest>, controller: Unit<DocController>) -> Result<(), DocError> {
let params: QueryDocParams = data.into_inner().try_into()?;
let _ = controller.delete_doc(params).await?;
Ok(()) Ok(())
} }

View File

@ -3,6 +3,7 @@ pub mod errors;
pub mod event; pub mod event;
mod handlers; mod handlers;
pub mod module; pub mod module;
mod observable;
mod protobuf; mod protobuf;
mod services; mod services;
mod sql_tables; mod sql_tables;

View File

@ -2,7 +2,7 @@ use crate::{
errors::DocError, errors::DocError,
event::EditorEvent, event::EditorEvent,
handlers::*, handlers::*,
services::{doc_controller::DocController, file_manager::FileManager}, services::{doc_controller::DocController, file_manager::FileManager, server::construct_doc_server},
}; };
use flowy_database::DBConnection; use flowy_database::DBConnection;
use flowy_dispatch::prelude::*; use flowy_dispatch::prelude::*;
@ -15,18 +15,21 @@ pub trait DocumentDatabase: Send + Sync {
pub trait DocumentUser: Send + Sync { pub trait DocumentUser: Send + Sync {
fn user_doc_dir(&self) -> Result<String, DocError>; fn user_doc_dir(&self) -> Result<String, DocError>;
fn user_id(&self) -> Result<String, DocError>;
fn token(&self) -> Result<String, DocError>;
} }
pub fn create(database: Arc<dyn DocumentDatabase>, user: Arc<dyn DocumentUser>) -> Module { pub fn create(database: Arc<dyn DocumentDatabase>, user: Arc<dyn DocumentUser>) -> Module {
let server = construct_doc_server();
let file_manager = RwLock::new(FileManager::new(user.clone())); let file_manager = RwLock::new(FileManager::new(user.clone()));
let doc_controller = DocController::new(database); let doc_controller = DocController::new(database, server.clone(), user.clone());
Module::new() Module::new()
.name("flowy-document") .name("flowy-document")
.data(file_manager) .data(file_manager)
.data(doc_controller) .data(doc_controller)
.event(EditorEvent::CreateDoc, create_doc) .event(EditorEvent::CreateDoc, create_doc_handler)
.event(EditorEvent::UpdateDoc, update_doc) .event(EditorEvent::UpdateDoc, update_doc_handler)
.event(EditorEvent::ReadDocInfo, read_doc) .event(EditorEvent::ReadDoc, read_doc_handler)
.event(EditorEvent::ReadDocData, read_doc_data) .event(EditorEvent::DeleteDoc, delete_doc_handler)
} }

View File

@ -0,0 +1,3 @@
mod observable;
pub use observable::*;

View File

@ -0,0 +1,13 @@
use flowy_derive::ProtoBuf_Enum;
use flowy_observable::ObservableBuilder;
const OBSERVABLE_CATEGORY: &'static str = "Doc";
#[derive(ProtoBuf_Enum, Debug)]
pub(crate) enum DocObservable {
UserCreateDoc = 0,
}
impl std::convert::Into<i32> for DocObservable {
fn into(self) -> i32 { self as i32 }
}
pub(crate) fn observable(id: &str, ty: DocObservable) -> ObservableBuilder { ObservableBuilder::new(id, ty, OBSERVABLE_CATEGORY) }

View File

@ -27,9 +27,7 @@
pub struct CreateDocRequest { pub struct CreateDocRequest {
// message fields // message fields
pub id: ::std::string::String, pub id: ::std::string::String,
pub name: ::std::string::String, pub data: ::std::string::String,
pub desc: ::std::string::String,
pub text: ::std::string::String,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
@ -72,82 +70,30 @@ impl CreateDocRequest {
::std::mem::replace(&mut self.id, ::std::string::String::new()) ::std::mem::replace(&mut self.id, ::std::string::String::new())
} }
// string name = 2; // string data = 2;
pub fn get_name(&self) -> &str { pub fn get_data(&self) -> &str {
&self.name &self.data
} }
pub fn clear_name(&mut self) { pub fn clear_data(&mut self) {
self.name.clear(); self.data.clear();
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_name(&mut self, v: ::std::string::String) { pub fn set_data(&mut self, v: ::std::string::String) {
self.name = v; self.data = v;
} }
// Mutable pointer to the field. // Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first. // If field is not initialized, it is initialized with default value first.
pub fn mut_name(&mut self) -> &mut ::std::string::String { pub fn mut_data(&mut self) -> &mut ::std::string::String {
&mut self.name &mut self.data
} }
// Take field // Take field
pub fn take_name(&mut self) -> ::std::string::String { pub fn take_data(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.name, ::std::string::String::new()) ::std::mem::replace(&mut self.data, ::std::string::String::new())
}
// string desc = 3;
pub fn get_desc(&self) -> &str {
&self.desc
}
pub fn clear_desc(&mut self) {
self.desc.clear();
}
// Param is passed by value, moved
pub fn set_desc(&mut self, v: ::std::string::String) {
self.desc = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_desc(&mut self) -> &mut ::std::string::String {
&mut self.desc
}
// Take field
pub fn take_desc(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.desc, ::std::string::String::new())
}
// string text = 4;
pub fn get_text(&self) -> &str {
&self.text
}
pub fn clear_text(&mut self) {
self.text.clear();
}
// Param is passed by value, moved
pub fn set_text(&mut self, v: ::std::string::String) {
self.text = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_text(&mut self) -> &mut ::std::string::String {
&mut self.text
}
// Take field
pub fn take_text(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.text, ::std::string::String::new())
} }
} }
@ -164,13 +110,7 @@ impl ::protobuf::Message for CreateDocRequest {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.id)?; ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.id)?;
}, },
2 => { 2 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.data)?;
},
3 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.desc)?;
},
4 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.text)?;
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -187,14 +127,8 @@ impl ::protobuf::Message for CreateDocRequest {
if !self.id.is_empty() { if !self.id.is_empty() {
my_size += ::protobuf::rt::string_size(1, &self.id); my_size += ::protobuf::rt::string_size(1, &self.id);
} }
if !self.name.is_empty() { if !self.data.is_empty() {
my_size += ::protobuf::rt::string_size(2, &self.name); my_size += ::protobuf::rt::string_size(2, &self.data);
}
if !self.desc.is_empty() {
my_size += ::protobuf::rt::string_size(3, &self.desc);
}
if !self.text.is_empty() {
my_size += ::protobuf::rt::string_size(4, &self.text);
} }
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
@ -205,14 +139,8 @@ impl ::protobuf::Message for CreateDocRequest {
if !self.id.is_empty() { if !self.id.is_empty() {
os.write_string(1, &self.id)?; os.write_string(1, &self.id)?;
} }
if !self.name.is_empty() { if !self.data.is_empty() {
os.write_string(2, &self.name)?; os.write_string(2, &self.data)?;
}
if !self.desc.is_empty() {
os.write_string(3, &self.desc)?;
}
if !self.text.is_empty() {
os.write_string(4, &self.text)?;
} }
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
@ -258,19 +186,9 @@ impl ::protobuf::Message for CreateDocRequest {
|m: &mut CreateDocRequest| { &mut m.id }, |m: &mut CreateDocRequest| { &mut m.id },
)); ));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"name", "data",
|m: &CreateDocRequest| { &m.name }, |m: &CreateDocRequest| { &m.data },
|m: &mut CreateDocRequest| { &mut m.name }, |m: &mut CreateDocRequest| { &mut m.data },
));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"desc",
|m: &CreateDocRequest| { &m.desc },
|m: &mut CreateDocRequest| { &mut m.desc },
));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"text",
|m: &CreateDocRequest| { &m.text },
|m: &mut CreateDocRequest| { &mut m.text },
)); ));
::protobuf::reflect::MessageDescriptor::new_pb_name::<CreateDocRequest>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<CreateDocRequest>(
"CreateDocRequest", "CreateDocRequest",
@ -289,9 +207,7 @@ impl ::protobuf::Message for CreateDocRequest {
impl ::protobuf::Clear for CreateDocRequest { impl ::protobuf::Clear for CreateDocRequest {
fn clear(&mut self) { fn clear(&mut self) {
self.id.clear(); self.id.clear();
self.name.clear(); self.data.clear();
self.desc.clear();
self.text.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
@ -309,25 +225,23 @@ impl ::protobuf::reflect::ProtobufValue for CreateDocRequest {
} }
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct DocInfo { pub struct CreateDocParams {
// message fields // message fields
pub id: ::std::string::String, pub id: ::std::string::String,
pub name: ::std::string::String, pub data: ::std::string::String,
pub desc: ::std::string::String,
pub path: ::std::string::String,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
} }
impl<'a> ::std::default::Default for &'a DocInfo { impl<'a> ::std::default::Default for &'a CreateDocParams {
fn default() -> &'a DocInfo { fn default() -> &'a CreateDocParams {
<DocInfo as ::protobuf::Message>::default_instance() <CreateDocParams as ::protobuf::Message>::default_instance()
} }
} }
impl DocInfo { impl CreateDocParams {
pub fn new() -> DocInfo { pub fn new() -> CreateDocParams {
::std::default::Default::default() ::std::default::Default::default()
} }
@ -357,86 +271,34 @@ impl DocInfo {
::std::mem::replace(&mut self.id, ::std::string::String::new()) ::std::mem::replace(&mut self.id, ::std::string::String::new())
} }
// string name = 2; // string data = 2;
pub fn get_name(&self) -> &str { pub fn get_data(&self) -> &str {
&self.name &self.data
} }
pub fn clear_name(&mut self) { pub fn clear_data(&mut self) {
self.name.clear(); self.data.clear();
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_name(&mut self, v: ::std::string::String) { pub fn set_data(&mut self, v: ::std::string::String) {
self.name = v; self.data = v;
} }
// Mutable pointer to the field. // Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first. // If field is not initialized, it is initialized with default value first.
pub fn mut_name(&mut self) -> &mut ::std::string::String { pub fn mut_data(&mut self) -> &mut ::std::string::String {
&mut self.name &mut self.data
} }
// Take field // Take field
pub fn take_name(&mut self) -> ::std::string::String { pub fn take_data(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.name, ::std::string::String::new()) ::std::mem::replace(&mut self.data, ::std::string::String::new())
}
// string desc = 3;
pub fn get_desc(&self) -> &str {
&self.desc
}
pub fn clear_desc(&mut self) {
self.desc.clear();
}
// Param is passed by value, moved
pub fn set_desc(&mut self, v: ::std::string::String) {
self.desc = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_desc(&mut self) -> &mut ::std::string::String {
&mut self.desc
}
// Take field
pub fn take_desc(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.desc, ::std::string::String::new())
}
// string path = 4;
pub fn get_path(&self) -> &str {
&self.path
}
pub fn clear_path(&mut self) {
self.path.clear();
}
// Param is passed by value, moved
pub fn set_path(&mut self, v: ::std::string::String) {
self.path = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_path(&mut self) -> &mut ::std::string::String {
&mut self.path
}
// Take field
pub fn take_path(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.path, ::std::string::String::new())
} }
} }
impl ::protobuf::Message for DocInfo { impl ::protobuf::Message for CreateDocParams {
fn is_initialized(&self) -> bool { fn is_initialized(&self) -> bool {
true true
} }
@ -449,13 +311,7 @@ impl ::protobuf::Message for DocInfo {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.id)?; ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.id)?;
}, },
2 => { 2 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.data)?;
},
3 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.desc)?;
},
4 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.path)?;
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -472,14 +328,8 @@ impl ::protobuf::Message for DocInfo {
if !self.id.is_empty() { if !self.id.is_empty() {
my_size += ::protobuf::rt::string_size(1, &self.id); my_size += ::protobuf::rt::string_size(1, &self.id);
} }
if !self.name.is_empty() { if !self.data.is_empty() {
my_size += ::protobuf::rt::string_size(2, &self.name); my_size += ::protobuf::rt::string_size(2, &self.data);
}
if !self.desc.is_empty() {
my_size += ::protobuf::rt::string_size(3, &self.desc);
}
if !self.path.is_empty() {
my_size += ::protobuf::rt::string_size(4, &self.path);
} }
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
@ -490,14 +340,8 @@ impl ::protobuf::Message for DocInfo {
if !self.id.is_empty() { if !self.id.is_empty() {
os.write_string(1, &self.id)?; os.write_string(1, &self.id)?;
} }
if !self.name.is_empty() { if !self.data.is_empty() {
os.write_string(2, &self.name)?; os.write_string(2, &self.data)?;
}
if !self.desc.is_empty() {
os.write_string(3, &self.desc)?;
}
if !self.path.is_empty() {
os.write_string(4, &self.path)?;
} }
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
@ -529,8 +373,8 @@ impl ::protobuf::Message for DocInfo {
Self::descriptor_static() Self::descriptor_static()
} }
fn new() -> DocInfo { fn new() -> CreateDocParams {
DocInfo::new() CreateDocParams::new()
} }
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
@ -539,108 +383,123 @@ impl ::protobuf::Message for DocInfo {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"id", "id",
|m: &DocInfo| { &m.id }, |m: &CreateDocParams| { &m.id },
|m: &mut DocInfo| { &mut m.id }, |m: &mut CreateDocParams| { &mut m.id },
)); ));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"name", "data",
|m: &DocInfo| { &m.name }, |m: &CreateDocParams| { &m.data },
|m: &mut DocInfo| { &mut m.name }, |m: &mut CreateDocParams| { &mut m.data },
)); ));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<CreateDocParams>(
"desc", "CreateDocParams",
|m: &DocInfo| { &m.desc },
|m: &mut DocInfo| { &mut m.desc },
));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"path",
|m: &DocInfo| { &m.path },
|m: &mut DocInfo| { &mut m.path },
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<DocInfo>(
"DocInfo",
fields, fields,
file_descriptor_proto() file_descriptor_proto()
) )
}) })
} }
fn default_instance() -> &'static DocInfo { fn default_instance() -> &'static CreateDocParams {
static instance: ::protobuf::rt::LazyV2<DocInfo> = ::protobuf::rt::LazyV2::INIT; static instance: ::protobuf::rt::LazyV2<CreateDocParams> = ::protobuf::rt::LazyV2::INIT;
instance.get(DocInfo::new) instance.get(CreateDocParams::new)
} }
} }
impl ::protobuf::Clear for DocInfo { impl ::protobuf::Clear for CreateDocParams {
fn clear(&mut self) { fn clear(&mut self) {
self.id.clear(); self.id.clear();
self.name.clear(); self.data.clear();
self.desc.clear();
self.path.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
impl ::std::fmt::Debug for DocInfo { impl ::std::fmt::Debug for CreateDocParams {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f) ::protobuf::text_format::fmt(self, f)
} }
} }
impl ::protobuf::reflect::ProtobufValue for DocInfo { impl ::protobuf::reflect::ProtobufValue for CreateDocParams {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self) ::protobuf::reflect::ReflectValueRef::Message(self)
} }
} }
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct DocData { pub struct Doc {
// message fields // message fields
pub text: ::std::string::String, pub id: ::std::string::String,
pub data: ::std::string::String,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
} }
impl<'a> ::std::default::Default for &'a DocData { impl<'a> ::std::default::Default for &'a Doc {
fn default() -> &'a DocData { fn default() -> &'a Doc {
<DocData as ::protobuf::Message>::default_instance() <Doc as ::protobuf::Message>::default_instance()
} }
} }
impl DocData { impl Doc {
pub fn new() -> DocData { pub fn new() -> Doc {
::std::default::Default::default() ::std::default::Default::default()
} }
// string text = 1; // string id = 1;
pub fn get_text(&self) -> &str { pub fn get_id(&self) -> &str {
&self.text &self.id
} }
pub fn clear_text(&mut self) { pub fn clear_id(&mut self) {
self.text.clear(); self.id.clear();
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_text(&mut self, v: ::std::string::String) { pub fn set_id(&mut self, v: ::std::string::String) {
self.text = v; self.id = v;
} }
// Mutable pointer to the field. // Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first. // If field is not initialized, it is initialized with default value first.
pub fn mut_text(&mut self) -> &mut ::std::string::String { pub fn mut_id(&mut self) -> &mut ::std::string::String {
&mut self.text &mut self.id
} }
// Take field // Take field
pub fn take_text(&mut self) -> ::std::string::String { pub fn take_id(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.text, ::std::string::String::new()) ::std::mem::replace(&mut self.id, ::std::string::String::new())
}
// string data = 2;
pub fn get_data(&self) -> &str {
&self.data
}
pub fn clear_data(&mut self) {
self.data.clear();
}
// Param is passed by value, moved
pub fn set_data(&mut self, v: ::std::string::String) {
self.data = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_data(&mut self) -> &mut ::std::string::String {
&mut self.data
}
// Take field
pub fn take_data(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.data, ::std::string::String::new())
} }
} }
impl ::protobuf::Message for DocData { impl ::protobuf::Message for Doc {
fn is_initialized(&self) -> bool { fn is_initialized(&self) -> bool {
true true
} }
@ -650,7 +509,10 @@ impl ::protobuf::Message for DocData {
let (field_number, wire_type) = is.read_tag_unpack()?; let (field_number, wire_type) = is.read_tag_unpack()?;
match field_number { match field_number {
1 => { 1 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.text)?; ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.id)?;
},
2 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.data)?;
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -664,8 +526,11 @@ impl ::protobuf::Message for DocData {
#[allow(unused_variables)] #[allow(unused_variables)]
fn compute_size(&self) -> u32 { fn compute_size(&self) -> u32 {
let mut my_size = 0; let mut my_size = 0;
if !self.text.is_empty() { if !self.id.is_empty() {
my_size += ::protobuf::rt::string_size(1, &self.text); my_size += ::protobuf::rt::string_size(1, &self.id);
}
if !self.data.is_empty() {
my_size += ::protobuf::rt::string_size(2, &self.data);
} }
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
@ -673,8 +538,11 @@ impl ::protobuf::Message for DocData {
} }
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
if !self.text.is_empty() { if !self.id.is_empty() {
os.write_string(1, &self.text)?; os.write_string(1, &self.id)?;
}
if !self.data.is_empty() {
os.write_string(2, &self.data)?;
} }
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
@ -706,8 +574,8 @@ impl ::protobuf::Message for DocData {
Self::descriptor_static() Self::descriptor_static()
} }
fn new() -> DocData { fn new() -> Doc {
DocData::new() Doc::new()
} }
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
@ -715,80 +583,76 @@ impl ::protobuf::Message for DocData {
descriptor.get(|| { descriptor.get(|| {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"text", "id",
|m: &DocData| { &m.text }, |m: &Doc| { &m.id },
|m: &mut DocData| { &mut m.text }, |m: &mut Doc| { &mut m.id },
)); ));
::protobuf::reflect::MessageDescriptor::new_pb_name::<DocData>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"DocData", "data",
|m: &Doc| { &m.data },
|m: &mut Doc| { &mut m.data },
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<Doc>(
"Doc",
fields, fields,
file_descriptor_proto() file_descriptor_proto()
) )
}) })
} }
fn default_instance() -> &'static DocData { fn default_instance() -> &'static Doc {
static instance: ::protobuf::rt::LazyV2<DocData> = ::protobuf::rt::LazyV2::INIT; static instance: ::protobuf::rt::LazyV2<Doc> = ::protobuf::rt::LazyV2::INIT;
instance.get(DocData::new) instance.get(Doc::new)
} }
} }
impl ::protobuf::Clear for DocData { impl ::protobuf::Clear for Doc {
fn clear(&mut self) { fn clear(&mut self) {
self.text.clear(); self.id.clear();
self.data.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
impl ::std::fmt::Debug for DocData { impl ::std::fmt::Debug for Doc {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f) ::protobuf::text_format::fmt(self, f)
} }
} }
impl ::protobuf::reflect::ProtobufValue for DocData { impl ::protobuf::reflect::ProtobufValue for Doc {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self) ::protobuf::reflect::ReflectValueRef::Message(self)
} }
} }
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x10doc_create.proto\"^\n\x10CreateDocRequest\x12\x0e\n\x02id\x18\x01\ \n\x10doc_create.proto\"6\n\x10CreateDocRequest\x12\x0e\n\x02id\x18\x01\
\x20\x01(\tR\x02id\x12\x12\n\x04name\x18\x02\x20\x01(\tR\x04name\x12\x12\ \x20\x01(\tR\x02id\x12\x12\n\x04data\x18\x02\x20\x01(\tR\x04data\"5\n\
\n\x04desc\x18\x03\x20\x01(\tR\x04desc\x12\x12\n\x04text\x18\x04\x20\x01\ \x0fCreateDocParams\x12\x0e\n\x02id\x18\x01\x20\x01(\tR\x02id\x12\x12\n\
(\tR\x04text\"U\n\x07DocInfo\x12\x0e\n\x02id\x18\x01\x20\x01(\tR\x02id\ \x04data\x18\x02\x20\x01(\tR\x04data\")\n\x03Doc\x12\x0e\n\x02id\x18\x01\
\x12\x12\n\x04name\x18\x02\x20\x01(\tR\x04name\x12\x12\n\x04desc\x18\x03\ \x20\x01(\tR\x02id\x12\x12\n\x04data\x18\x02\x20\x01(\tR\x04dataJ\xa4\
\x20\x01(\tR\x04desc\x12\x12\n\x04path\x18\x04\x20\x01(\tR\x04path\"\x1d\ \x03\n\x06\x12\x04\0\0\r\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\
\n\x07DocData\x12\x12\n\x04text\x18\x01\x20\x01(\tR\x04textJ\xc9\x04\n\ \x04\0\x12\x04\x02\0\x05\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\x08\x18\n\
\x06\x12\x04\0\0\x10\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\ \x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x12\n\x0c\n\x05\x04\0\x02\0\x05\
\x12\x04\x02\0\x07\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\x08\x18\n\x0b\n\ \x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x0b\r\n\x0c\n\
\x04\x04\0\x02\0\x12\x03\x03\x04\x12\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\ \x05\x04\0\x02\0\x03\x12\x03\x03\x10\x11\n\x0b\n\x04\x04\0\x02\x01\x12\
\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x0b\r\n\x0c\n\x05\x04\ \x03\x04\x04\x14\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x04\x04\n\n\x0c\n\
\0\x02\0\x03\x12\x03\x03\x10\x11\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x04\ \x05\x04\0\x02\x01\x01\x12\x03\x04\x0b\x0f\n\x0c\n\x05\x04\0\x02\x01\x03\
\x04\x14\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x04\x04\n\n\x0c\n\x05\x04\ \x12\x03\x04\x12\x13\n\n\n\x02\x04\x01\x12\x04\x06\0\t\x01\n\n\n\x03\x04\
\0\x02\x01\x01\x12\x03\x04\x0b\x0f\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\ \x01\x01\x12\x03\x06\x08\x17\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x07\x04\
\x04\x12\x13\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x05\x04\x14\n\x0c\n\x05\ \x12\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x07\x04\n\n\x0c\n\x05\x04\x01\
\x04\0\x02\x02\x05\x12\x03\x05\x04\n\n\x0c\n\x05\x04\0\x02\x02\x01\x12\ \x02\0\x01\x12\x03\x07\x0b\r\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x07\
\x03\x05\x0b\x0f\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\x05\x12\x13\n\x0b\ \x10\x11\n\x0b\n\x04\x04\x01\x02\x01\x12\x03\x08\x04\x14\n\x0c\n\x05\x04\
\n\x04\x04\0\x02\x03\x12\x03\x06\x04\x14\n\x0c\n\x05\x04\0\x02\x03\x05\ \x01\x02\x01\x05\x12\x03\x08\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\
\x12\x03\x06\x04\n\n\x0c\n\x05\x04\0\x02\x03\x01\x12\x03\x06\x0b\x0f\n\ \x03\x08\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\x08\x12\x13\n\n\
\x0c\n\x05\x04\0\x02\x03\x03\x12\x03\x06\x12\x13\n\n\n\x02\x04\x01\x12\ \n\x02\x04\x02\x12\x04\n\0\r\x01\n\n\n\x03\x04\x02\x01\x12\x03\n\x08\x0b\
\x04\x08\0\r\x01\n\n\n\x03\x04\x01\x01\x12\x03\x08\x08\x0f\n\x0b\n\x04\ \n\x0b\n\x04\x04\x02\x02\0\x12\x03\x0b\x04\x12\n\x0c\n\x05\x04\x02\x02\0\
\x04\x01\x02\0\x12\x03\t\x04\x12\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\t\ \x05\x12\x03\x0b\x04\n\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03\x0b\x0b\r\n\
\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\t\x0b\r\n\x0c\n\x05\x04\x01\ \x0c\n\x05\x04\x02\x02\0\x03\x12\x03\x0b\x10\x11\n\x0b\n\x04\x04\x02\x02\
\x02\0\x03\x12\x03\t\x10\x11\n\x0b\n\x04\x04\x01\x02\x01\x12\x03\n\x04\ \x01\x12\x03\x0c\x04\x14\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03\x0c\x04\
\x14\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\n\x04\n\n\x0c\n\x05\x04\x01\ \n\n\x0c\n\x05\x04\x02\x02\x01\x01\x12\x03\x0c\x0b\x0f\n\x0c\n\x05\x04\
\x02\x01\x01\x12\x03\n\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\n\ \x02\x02\x01\x03\x12\x03\x0c\x12\x13b\x06proto3\
\x12\x13\n\x0b\n\x04\x04\x01\x02\x02\x12\x03\x0b\x04\x14\n\x0c\n\x05\x04\
\x01\x02\x02\x05\x12\x03\x0b\x04\n\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\
\x03\x0b\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03\x0b\x12\x13\n\
\x0b\n\x04\x04\x01\x02\x03\x12\x03\x0c\x04\x14\n\x0c\n\x05\x04\x01\x02\
\x03\x05\x12\x03\x0c\x04\n\n\x0c\n\x05\x04\x01\x02\x03\x01\x12\x03\x0c\
\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x03\x0c\x12\x13\n\n\n\x02\
\x04\x02\x12\x04\x0e\0\x10\x01\n\n\n\x03\x04\x02\x01\x12\x03\x0e\x08\x0f\
\n\x0b\n\x04\x04\x02\x02\0\x12\x03\x0f\x04\x14\n\x0c\n\x05\x04\x02\x02\0\
\x05\x12\x03\x0f\x04\n\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03\x0f\x0b\x0f\
\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03\x0f\x12\x13b\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -28,9 +28,7 @@ pub struct UpdateDocRequest {
// message fields // message fields
pub id: ::std::string::String, pub id: ::std::string::String,
// message oneof groups // message oneof groups
pub one_of_name: ::std::option::Option<UpdateDocRequest_oneof_one_of_name>, pub one_of_data: ::std::option::Option<UpdateDocRequest_oneof_one_of_data>,
pub one_of_desc: ::std::option::Option<UpdateDocRequest_oneof_one_of_desc>,
pub one_of_text: ::std::option::Option<UpdateDocRequest_oneof_one_of_text>,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
@ -43,18 +41,8 @@ impl<'a> ::std::default::Default for &'a UpdateDocRequest {
} }
#[derive(Clone,PartialEq,Debug)] #[derive(Clone,PartialEq,Debug)]
pub enum UpdateDocRequest_oneof_one_of_name { pub enum UpdateDocRequest_oneof_one_of_data {
name(::std::string::String), data(::std::string::String),
}
#[derive(Clone,PartialEq,Debug)]
pub enum UpdateDocRequest_oneof_one_of_desc {
desc(::std::string::String),
}
#[derive(Clone,PartialEq,Debug)]
pub enum UpdateDocRequest_oneof_one_of_text {
text(::std::string::String),
} }
impl UpdateDocRequest { impl UpdateDocRequest {
@ -88,146 +76,48 @@ impl UpdateDocRequest {
::std::mem::replace(&mut self.id, ::std::string::String::new()) ::std::mem::replace(&mut self.id, ::std::string::String::new())
} }
// string name = 2; // string data = 2;
pub fn get_name(&self) -> &str { pub fn get_data(&self) -> &str {
match self.one_of_name { match self.one_of_data {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(ref v)) => v, ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(ref v)) => v,
_ => "", _ => "",
} }
} }
pub fn clear_name(&mut self) { pub fn clear_data(&mut self) {
self.one_of_name = ::std::option::Option::None; self.one_of_data = ::std::option::Option::None;
} }
pub fn has_name(&self) -> bool { pub fn has_data(&self) -> bool {
match self.one_of_name { match self.one_of_data {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(..)) => true, ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(..)) => true,
_ => false, _ => false,
} }
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_name(&mut self, v: ::std::string::String) { pub fn set_data(&mut self, v: ::std::string::String) {
self.one_of_name = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(v)) self.one_of_data = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(v))
} }
// Mutable pointer to the field. // Mutable pointer to the field.
pub fn mut_name(&mut self) -> &mut ::std::string::String { pub fn mut_data(&mut self) -> &mut ::std::string::String {
if let ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(_)) = self.one_of_name { if let ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(_)) = self.one_of_data {
} else { } else {
self.one_of_name = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(::std::string::String::new())); self.one_of_data = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(::std::string::String::new()));
} }
match self.one_of_name { match self.one_of_data {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(ref mut v)) => v, ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(ref mut v)) => v,
_ => panic!(), _ => panic!(),
} }
} }
// Take field // Take field
pub fn take_name(&mut self) -> ::std::string::String { pub fn take_data(&mut self) -> ::std::string::String {
if self.has_name() { if self.has_data() {
match self.one_of_name.take() { match self.one_of_data.take() {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(v)) => v, ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(v)) => v,
_ => panic!(),
}
} else {
::std::string::String::new()
}
}
// string desc = 3;
pub fn get_desc(&self) -> &str {
match self.one_of_desc {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(ref v)) => v,
_ => "",
}
}
pub fn clear_desc(&mut self) {
self.one_of_desc = ::std::option::Option::None;
}
pub fn has_desc(&self) -> bool {
match self.one_of_desc {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(..)) => true,
_ => false,
}
}
// Param is passed by value, moved
pub fn set_desc(&mut self, v: ::std::string::String) {
self.one_of_desc = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(v))
}
// Mutable pointer to the field.
pub fn mut_desc(&mut self) -> &mut ::std::string::String {
if let ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(_)) = self.one_of_desc {
} else {
self.one_of_desc = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(::std::string::String::new()));
}
match self.one_of_desc {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(ref mut v)) => v,
_ => panic!(),
}
}
// Take field
pub fn take_desc(&mut self) -> ::std::string::String {
if self.has_desc() {
match self.one_of_desc.take() {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(v)) => v,
_ => panic!(),
}
} else {
::std::string::String::new()
}
}
// string text = 4;
pub fn get_text(&self) -> &str {
match self.one_of_text {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(ref v)) => v,
_ => "",
}
}
pub fn clear_text(&mut self) {
self.one_of_text = ::std::option::Option::None;
}
pub fn has_text(&self) -> bool {
match self.one_of_text {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(..)) => true,
_ => false,
}
}
// Param is passed by value, moved
pub fn set_text(&mut self, v: ::std::string::String) {
self.one_of_text = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(v))
}
// Mutable pointer to the field.
pub fn mut_text(&mut self) -> &mut ::std::string::String {
if let ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(_)) = self.one_of_text {
} else {
self.one_of_text = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(::std::string::String::new()));
}
match self.one_of_text {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(ref mut v)) => v,
_ => panic!(),
}
}
// Take field
pub fn take_text(&mut self) -> ::std::string::String {
if self.has_text() {
match self.one_of_text.take() {
::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(v)) => v,
_ => panic!(), _ => panic!(),
} }
} else { } else {
@ -252,19 +142,7 @@ impl ::protobuf::Message for UpdateDocRequest {
if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited { if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
} }
self.one_of_name = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_name::name(is.read_string()?)); self.one_of_data = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_data::data(is.read_string()?));
},
3 => {
if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
}
self.one_of_desc = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_desc::desc(is.read_string()?));
},
4 => {
if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
}
self.one_of_text = ::std::option::Option::Some(UpdateDocRequest_oneof_one_of_text::text(is.read_string()?));
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -281,27 +159,13 @@ impl ::protobuf::Message for UpdateDocRequest {
if !self.id.is_empty() { if !self.id.is_empty() {
my_size += ::protobuf::rt::string_size(1, &self.id); my_size += ::protobuf::rt::string_size(1, &self.id);
} }
if let ::std::option::Option::Some(ref v) = self.one_of_name { if let ::std::option::Option::Some(ref v) = self.one_of_data {
match v { match v {
&UpdateDocRequest_oneof_one_of_name::name(ref v) => { &UpdateDocRequest_oneof_one_of_data::data(ref v) => {
my_size += ::protobuf::rt::string_size(2, &v); my_size += ::protobuf::rt::string_size(2, &v);
}, },
}; };
} }
if let ::std::option::Option::Some(ref v) = self.one_of_desc {
match v {
&UpdateDocRequest_oneof_one_of_desc::desc(ref v) => {
my_size += ::protobuf::rt::string_size(3, &v);
},
};
}
if let ::std::option::Option::Some(ref v) = self.one_of_text {
match v {
&UpdateDocRequest_oneof_one_of_text::text(ref v) => {
my_size += ::protobuf::rt::string_size(4, &v);
},
};
}
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
my_size my_size
@ -311,27 +175,13 @@ impl ::protobuf::Message for UpdateDocRequest {
if !self.id.is_empty() { if !self.id.is_empty() {
os.write_string(1, &self.id)?; os.write_string(1, &self.id)?;
} }
if let ::std::option::Option::Some(ref v) = self.one_of_name { if let ::std::option::Option::Some(ref v) = self.one_of_data {
match v { match v {
&UpdateDocRequest_oneof_one_of_name::name(ref v) => { &UpdateDocRequest_oneof_one_of_data::data(ref v) => {
os.write_string(2, v)?; os.write_string(2, v)?;
}, },
}; };
} }
if let ::std::option::Option::Some(ref v) = self.one_of_desc {
match v {
&UpdateDocRequest_oneof_one_of_desc::desc(ref v) => {
os.write_string(3, v)?;
},
};
}
if let ::std::option::Option::Some(ref v) = self.one_of_text {
match v {
&UpdateDocRequest_oneof_one_of_text::text(ref v) => {
os.write_string(4, v)?;
},
};
}
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
} }
@ -376,19 +226,9 @@ impl ::protobuf::Message for UpdateDocRequest {
|m: &mut UpdateDocRequest| { &mut m.id }, |m: &mut UpdateDocRequest| { &mut m.id },
)); ));
fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>( fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
"name", "data",
UpdateDocRequest::has_name, UpdateDocRequest::has_data,
UpdateDocRequest::get_name, UpdateDocRequest::get_data,
));
fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
"desc",
UpdateDocRequest::has_desc,
UpdateDocRequest::get_desc,
));
fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
"text",
UpdateDocRequest::has_text,
UpdateDocRequest::get_text,
)); ));
::protobuf::reflect::MessageDescriptor::new_pb_name::<UpdateDocRequest>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<UpdateDocRequest>(
"UpdateDocRequest", "UpdateDocRequest",
@ -407,9 +247,7 @@ impl ::protobuf::Message for UpdateDocRequest {
impl ::protobuf::Clear for UpdateDocRequest { impl ::protobuf::Clear for UpdateDocRequest {
fn clear(&mut self) { fn clear(&mut self) {
self.id.clear(); self.id.clear();
self.one_of_name = ::std::option::Option::None; self.one_of_data = ::std::option::Option::None;
self.one_of_desc = ::std::option::Option::None;
self.one_of_text = ::std::option::Option::None;
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
@ -426,28 +264,269 @@ impl ::protobuf::reflect::ProtobufValue for UpdateDocRequest {
} }
} }
#[derive(PartialEq,Clone,Default)]
pub struct UpdateDocParams {
// message fields
pub id: ::std::string::String,
// message oneof groups
pub one_of_data: ::std::option::Option<UpdateDocParams_oneof_one_of_data>,
// special fields
pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize,
}
impl<'a> ::std::default::Default for &'a UpdateDocParams {
fn default() -> &'a UpdateDocParams {
<UpdateDocParams as ::protobuf::Message>::default_instance()
}
}
#[derive(Clone,PartialEq,Debug)]
pub enum UpdateDocParams_oneof_one_of_data {
data(::std::string::String),
}
impl UpdateDocParams {
pub fn new() -> UpdateDocParams {
::std::default::Default::default()
}
// string id = 1;
pub fn get_id(&self) -> &str {
&self.id
}
pub fn clear_id(&mut self) {
self.id.clear();
}
// Param is passed by value, moved
pub fn set_id(&mut self, v: ::std::string::String) {
self.id = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_id(&mut self) -> &mut ::std::string::String {
&mut self.id
}
// Take field
pub fn take_id(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.id, ::std::string::String::new())
}
// string data = 2;
pub fn get_data(&self) -> &str {
match self.one_of_data {
::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(ref v)) => v,
_ => "",
}
}
pub fn clear_data(&mut self) {
self.one_of_data = ::std::option::Option::None;
}
pub fn has_data(&self) -> bool {
match self.one_of_data {
::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(..)) => true,
_ => false,
}
}
// Param is passed by value, moved
pub fn set_data(&mut self, v: ::std::string::String) {
self.one_of_data = ::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(v))
}
// Mutable pointer to the field.
pub fn mut_data(&mut self) -> &mut ::std::string::String {
if let ::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(_)) = self.one_of_data {
} else {
self.one_of_data = ::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(::std::string::String::new()));
}
match self.one_of_data {
::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(ref mut v)) => v,
_ => panic!(),
}
}
// Take field
pub fn take_data(&mut self) -> ::std::string::String {
if self.has_data() {
match self.one_of_data.take() {
::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(v)) => v,
_ => panic!(),
}
} else {
::std::string::String::new()
}
}
}
impl ::protobuf::Message for UpdateDocParams {
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.id)?;
},
2 => {
if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
}
self.one_of_data = ::std::option::Option::Some(UpdateDocParams_oneof_one_of_data::data(is.read_string()?));
},
_ => {
::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.id.is_empty() {
my_size += ::protobuf::rt::string_size(1, &self.id);
}
if let ::std::option::Option::Some(ref v) = self.one_of_data {
match v {
&UpdateDocParams_oneof_one_of_data::data(ref v) => {
my_size += ::protobuf::rt::string_size(2, &v);
},
};
}
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.id.is_empty() {
os.write_string(1, &self.id)?;
}
if let ::std::option::Option::Some(ref v) = self.one_of_data {
match v {
&UpdateDocParams_oneof_one_of_data::data(ref v) => {
os.write_string(2, 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() -> UpdateDocParams {
UpdateDocParams::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>(
"id",
|m: &UpdateDocParams| { &m.id },
|m: &mut UpdateDocParams| { &mut m.id },
));
fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
"data",
UpdateDocParams::has_data,
UpdateDocParams::get_data,
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<UpdateDocParams>(
"UpdateDocParams",
fields,
file_descriptor_proto()
)
})
}
fn default_instance() -> &'static UpdateDocParams {
static instance: ::protobuf::rt::LazyV2<UpdateDocParams> = ::protobuf::rt::LazyV2::INIT;
instance.get(UpdateDocParams::new)
}
}
impl ::protobuf::Clear for UpdateDocParams {
fn clear(&mut self) {
self.id.clear();
self.one_of_data = ::std::option::Option::None;
self.unknown_fields.clear();
}
}
impl ::std::fmt::Debug for UpdateDocParams {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for UpdateDocParams {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self)
}
}
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x10doc_modify.proto\"\x91\x01\n\x10UpdateDocRequest\x12\x0e\n\x02id\ \n\x10doc_modify.proto\"G\n\x10UpdateDocRequest\x12\x0e\n\x02id\x18\x01\
\x18\x01\x20\x01(\tR\x02id\x12\x14\n\x04name\x18\x02\x20\x01(\tH\0R\x04n\ \x20\x01(\tR\x02id\x12\x14\n\x04data\x18\x02\x20\x01(\tH\0R\x04dataB\r\n\
ame\x12\x14\n\x04desc\x18\x03\x20\x01(\tH\x01R\x04desc\x12\x14\n\x04text\ \x0bone_of_data\"F\n\x0fUpdateDocParams\x12\x0e\n\x02id\x18\x01\x20\x01(\
\x18\x04\x20\x01(\tH\x02R\x04textB\r\n\x0bone_of_nameB\r\n\x0bone_of_des\ \tR\x02id\x12\x14\n\x04data\x18\x02\x20\x01(\tH\0R\x04dataB\r\n\x0bone_o\
cB\r\n\x0bone_of_textJ\xd7\x02\n\x06\x12\x04\0\0\x07\x01\n\x08\n\x01\x0c\ f_dataJ\xd4\x02\n\x06\x12\x04\0\0\t\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\
\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x07\x01\n\n\n\x03\x04\0\ \n\n\n\x02\x04\0\x12\x04\x02\0\x05\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\
\x01\x12\x03\x02\x08\x18\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x12\n\ \x08\x18\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x12\n\x0c\n\x05\x04\0\
\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\ \x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x0b\
\x12\x03\x03\x0b\r\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x10\x11\n\x0b\ \r\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x10\x11\n\x0b\n\x04\x04\0\x08\
\n\x04\x04\0\x08\0\x12\x03\x04\x04*\n\x0c\n\x05\x04\0\x08\0\x01\x12\x03\ \0\x12\x03\x04\x04*\n\x0c\n\x05\x04\0\x08\0\x01\x12\x03\x04\n\x15\n\x0b\
\x04\n\x15\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x04\x18(\n\x0c\n\x05\x04\0\ \n\x04\x04\0\x02\x01\x12\x03\x04\x18(\n\x0c\n\x05\x04\0\x02\x01\x05\x12\
\x02\x01\x05\x12\x03\x04\x18\x1e\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\ \x03\x04\x18\x1e\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x04\x1f#\n\x0c\n\
\x04\x1f#\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x04&'\n\x0b\n\x04\x04\0\ \x05\x04\0\x02\x01\x03\x12\x03\x04&'\n\n\n\x02\x04\x01\x12\x04\x06\0\t\
\x08\x01\x12\x03\x05\x04*\n\x0c\n\x05\x04\0\x08\x01\x01\x12\x03\x05\n\ \x01\n\n\n\x03\x04\x01\x01\x12\x03\x06\x08\x17\n\x0b\n\x04\x04\x01\x02\0\
\x15\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x05\x18(\n\x0c\n\x05\x04\0\x02\ \x12\x03\x07\x04\x12\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x07\x04\n\n\
\x02\x05\x12\x03\x05\x18\x1e\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x05\ \x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x07\x0b\r\n\x0c\n\x05\x04\x01\x02\0\
\x1f#\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\x05&'\n\x0b\n\x04\x04\0\x08\ \x03\x12\x03\x07\x10\x11\n\x0b\n\x04\x04\x01\x08\0\x12\x03\x08\x04*\n\
\x02\x12\x03\x06\x04*\n\x0c\n\x05\x04\0\x08\x02\x01\x12\x03\x06\n\x15\n\ \x0c\n\x05\x04\x01\x08\0\x01\x12\x03\x08\n\x15\n\x0b\n\x04\x04\x01\x02\
\x0b\n\x04\x04\0\x02\x03\x12\x03\x06\x18(\n\x0c\n\x05\x04\0\x02\x03\x05\ \x01\x12\x03\x08\x18(\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\x08\x18\
\x12\x03\x06\x18\x1e\n\x0c\n\x05\x04\0\x02\x03\x01\x12\x03\x06\x1f#\n\ \x1e\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x08\x1f#\n\x0c\n\x05\x04\
\x0c\n\x05\x04\0\x02\x03\x03\x12\x03\x06&'b\x06proto3\ \x01\x02\x01\x03\x12\x03\x08&'b\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -183,23 +183,22 @@ impl ::protobuf::reflect::ProtobufValue for QueryDocRequest {
} }
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct QueryDocDataRequest { pub struct QueryDocParams {
// message fields // message fields
pub doc_id: ::std::string::String, pub doc_id: ::std::string::String,
pub path: ::std::string::String,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
} }
impl<'a> ::std::default::Default for &'a QueryDocDataRequest { impl<'a> ::std::default::Default for &'a QueryDocParams {
fn default() -> &'a QueryDocDataRequest { fn default() -> &'a QueryDocParams {
<QueryDocDataRequest as ::protobuf::Message>::default_instance() <QueryDocParams as ::protobuf::Message>::default_instance()
} }
} }
impl QueryDocDataRequest { impl QueryDocParams {
pub fn new() -> QueryDocDataRequest { pub fn new() -> QueryDocParams {
::std::default::Default::default() ::std::default::Default::default()
} }
@ -228,35 +227,9 @@ impl QueryDocDataRequest {
pub fn take_doc_id(&mut self) -> ::std::string::String { pub fn take_doc_id(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.doc_id, ::std::string::String::new()) ::std::mem::replace(&mut self.doc_id, ::std::string::String::new())
} }
// string path = 2;
pub fn get_path(&self) -> &str {
&self.path
}
pub fn clear_path(&mut self) {
self.path.clear();
} }
// Param is passed by value, moved impl ::protobuf::Message for QueryDocParams {
pub fn set_path(&mut self, v: ::std::string::String) {
self.path = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_path(&mut self) -> &mut ::std::string::String {
&mut self.path
}
// Take field
pub fn take_path(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.path, ::std::string::String::new())
}
}
impl ::protobuf::Message for QueryDocDataRequest {
fn is_initialized(&self) -> bool { fn is_initialized(&self) -> bool {
true true
} }
@ -268,9 +241,6 @@ impl ::protobuf::Message for QueryDocDataRequest {
1 => { 1 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.doc_id)?; ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.doc_id)?;
}, },
2 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.path)?;
},
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
}, },
@ -286,9 +256,6 @@ impl ::protobuf::Message for QueryDocDataRequest {
if !self.doc_id.is_empty() { if !self.doc_id.is_empty() {
my_size += ::protobuf::rt::string_size(1, &self.doc_id); my_size += ::protobuf::rt::string_size(1, &self.doc_id);
} }
if !self.path.is_empty() {
my_size += ::protobuf::rt::string_size(2, &self.path);
}
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
my_size my_size
@ -298,9 +265,6 @@ impl ::protobuf::Message for QueryDocDataRequest {
if !self.doc_id.is_empty() { if !self.doc_id.is_empty() {
os.write_string(1, &self.doc_id)?; os.write_string(1, &self.doc_id)?;
} }
if !self.path.is_empty() {
os.write_string(2, &self.path)?;
}
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
} }
@ -331,8 +295,8 @@ impl ::protobuf::Message for QueryDocDataRequest {
Self::descriptor_static() Self::descriptor_static()
} }
fn new() -> QueryDocDataRequest { fn new() -> QueryDocParams {
QueryDocDataRequest::new() QueryDocParams::new()
} }
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
@ -341,43 +305,37 @@ impl ::protobuf::Message for QueryDocDataRequest {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"doc_id", "doc_id",
|m: &QueryDocDataRequest| { &m.doc_id }, |m: &QueryDocParams| { &m.doc_id },
|m: &mut QueryDocDataRequest| { &mut m.doc_id }, |m: &mut QueryDocParams| { &mut m.doc_id },
)); ));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<QueryDocParams>(
"path", "QueryDocParams",
|m: &QueryDocDataRequest| { &m.path },
|m: &mut QueryDocDataRequest| { &mut m.path },
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<QueryDocDataRequest>(
"QueryDocDataRequest",
fields, fields,
file_descriptor_proto() file_descriptor_proto()
) )
}) })
} }
fn default_instance() -> &'static QueryDocDataRequest { fn default_instance() -> &'static QueryDocParams {
static instance: ::protobuf::rt::LazyV2<QueryDocDataRequest> = ::protobuf::rt::LazyV2::INIT; static instance: ::protobuf::rt::LazyV2<QueryDocParams> = ::protobuf::rt::LazyV2::INIT;
instance.get(QueryDocDataRequest::new) instance.get(QueryDocParams::new)
} }
} }
impl ::protobuf::Clear for QueryDocDataRequest { impl ::protobuf::Clear for QueryDocParams {
fn clear(&mut self) { fn clear(&mut self) {
self.doc_id.clear(); self.doc_id.clear();
self.path.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
impl ::std::fmt::Debug for QueryDocDataRequest { impl ::std::fmt::Debug for QueryDocParams {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f) ::protobuf::text_format::fmt(self, f)
} }
} }
impl ::protobuf::reflect::ProtobufValue for QueryDocDataRequest { impl ::protobuf::reflect::ProtobufValue for QueryDocParams {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self) ::protobuf::reflect::ReflectValueRef::Message(self)
} }
@ -385,20 +343,17 @@ impl ::protobuf::reflect::ProtobufValue for QueryDocDataRequest {
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0fdoc_query.proto\"(\n\x0fQueryDocRequest\x12\x15\n\x06doc_id\x18\ \n\x0fdoc_query.proto\"(\n\x0fQueryDocRequest\x12\x15\n\x06doc_id\x18\
\x01\x20\x01(\tR\x05docId\"@\n\x13QueryDocDataRequest\x12\x15\n\x06doc_i\ \x01\x20\x01(\tR\x05docId\"'\n\x0eQueryDocParams\x12\x15\n\x06doc_id\x18\
d\x18\x01\x20\x01(\tR\x05docId\x12\x12\n\x04path\x18\x02\x20\x01(\tR\x04\ \x01\x20\x01(\tR\x05docIdJ\xb0\x01\n\x06\x12\x04\0\0\x07\x01\n\x08\n\x01\
pathJ\xe7\x01\n\x06\x12\x04\0\0\x08\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\ \x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\n\n\x03\x04\
\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\ \0\x01\x12\x03\x02\x08\x17\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x16\n\
\x08\x17\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x16\n\x0c\n\x05\x04\0\ \x0c\n\x05\x04\0\x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\
\x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x0b\ \x12\x03\x03\x0b\x11\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x14\x15\n\n\
\x11\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x14\x15\n\n\n\x02\x04\x01\ \n\x02\x04\x01\x12\x04\x05\0\x07\x01\n\n\n\x03\x04\x01\x01\x12\x03\x05\
\x12\x04\x05\0\x08\x01\n\n\n\x03\x04\x01\x01\x12\x03\x05\x08\x1b\n\x0b\n\ \x08\x16\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x06\x04\x16\n\x0c\n\x05\x04\
\x04\x04\x01\x02\0\x12\x03\x06\x04\x16\n\x0c\n\x05\x04\x01\x02\0\x05\x12\ \x01\x02\0\x05\x12\x03\x06\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\
\x03\x06\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x06\x0b\x11\n\x0c\n\ \x06\x0b\x11\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x06\x14\x15b\x06proto\
\x05\x04\x01\x02\0\x03\x12\x03\x06\x14\x15\n\x0b\n\x04\x04\x01\x02\x01\ 3\
\x12\x03\x07\x04\x14\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\x07\x04\n\n\
\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x07\x0b\x0f\n\x0c\n\x05\x04\x01\
\x02\x01\x03\x12\x03\x07\x12\x13b\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -26,7 +26,7 @@
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct DocError { pub struct DocError {
// message fields // message fields
pub code: DocErrorCode, pub code: ErrorCode,
pub msg: ::std::string::String, pub msg: ::std::string::String,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
@ -44,18 +44,18 @@ impl DocError {
::std::default::Default::default() ::std::default::Default::default()
} }
// .DocErrorCode code = 1; // .ErrorCode code = 1;
pub fn get_code(&self) -> DocErrorCode { pub fn get_code(&self) -> ErrorCode {
self.code self.code
} }
pub fn clear_code(&mut self) { pub fn clear_code(&mut self) {
self.code = DocErrorCode::Unknown; self.code = ErrorCode::DocIdInvalid;
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_code(&mut self, v: DocErrorCode) { pub fn set_code(&mut self, v: ErrorCode) {
self.code = v; self.code = v;
} }
@ -113,7 +113,7 @@ impl ::protobuf::Message for DocError {
#[allow(unused_variables)] #[allow(unused_variables)]
fn compute_size(&self) -> u32 { fn compute_size(&self) -> u32 {
let mut my_size = 0; let mut my_size = 0;
if self.code != DocErrorCode::Unknown { if self.code != ErrorCode::DocIdInvalid {
my_size += ::protobuf::rt::enum_size(1, self.code); my_size += ::protobuf::rt::enum_size(1, self.code);
} }
if !self.msg.is_empty() { if !self.msg.is_empty() {
@ -125,7 +125,7 @@ impl ::protobuf::Message for DocError {
} }
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
if self.code != DocErrorCode::Unknown { if self.code != ErrorCode::DocIdInvalid {
os.write_enum(1, ::protobuf::ProtobufEnum::value(&self.code))?; os.write_enum(1, ::protobuf::ProtobufEnum::value(&self.code))?;
} }
if !self.msg.is_empty() { if !self.msg.is_empty() {
@ -169,7 +169,7 @@ impl ::protobuf::Message for DocError {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| { descriptor.get(|| {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeEnum<DocErrorCode>>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeEnum<ErrorCode>>(
"code", "code",
|m: &DocError| { &m.code }, |m: &DocError| { &m.code },
|m: &mut DocError| { &mut m.code }, |m: &mut DocError| { &mut m.code },
@ -195,7 +195,7 @@ impl ::protobuf::Message for DocError {
impl ::protobuf::Clear for DocError { impl ::protobuf::Clear for DocError {
fn clear(&mut self) { fn clear(&mut self) {
self.code = DocErrorCode::Unknown; self.code = ErrorCode::DocIdInvalid;
self.msg.clear(); self.msg.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
@ -214,49 +214,34 @@ impl ::protobuf::reflect::ProtobufValue for DocError {
} }
#[derive(Clone,PartialEq,Eq,Debug,Hash)] #[derive(Clone,PartialEq,Eq,Debug,Hash)]
pub enum DocErrorCode { pub enum ErrorCode {
Unknown = 0, DocIdInvalid = 0,
EditorDBInternalError = 1, DocNotfound = 1,
EditorDBConnFailed = 2, UserUnauthorized = 999,
DocNameInvalid = 10, InternalError = 1000,
DocViewIdInvalid = 11,
DocDescTooLong = 12,
DocOpenFileError = 13,
DocFilePathInvalid = 14,
EditorUserNotLoginYet = 100,
} }
impl ::protobuf::ProtobufEnum for DocErrorCode { impl ::protobuf::ProtobufEnum for ErrorCode {
fn value(&self) -> i32 { fn value(&self) -> i32 {
*self as i32 *self as i32
} }
fn from_i32(value: i32) -> ::std::option::Option<DocErrorCode> { fn from_i32(value: i32) -> ::std::option::Option<ErrorCode> {
match value { match value {
0 => ::std::option::Option::Some(DocErrorCode::Unknown), 0 => ::std::option::Option::Some(ErrorCode::DocIdInvalid),
1 => ::std::option::Option::Some(DocErrorCode::EditorDBInternalError), 1 => ::std::option::Option::Some(ErrorCode::DocNotfound),
2 => ::std::option::Option::Some(DocErrorCode::EditorDBConnFailed), 999 => ::std::option::Option::Some(ErrorCode::UserUnauthorized),
10 => ::std::option::Option::Some(DocErrorCode::DocNameInvalid), 1000 => ::std::option::Option::Some(ErrorCode::InternalError),
11 => ::std::option::Option::Some(DocErrorCode::DocViewIdInvalid),
12 => ::std::option::Option::Some(DocErrorCode::DocDescTooLong),
13 => ::std::option::Option::Some(DocErrorCode::DocOpenFileError),
14 => ::std::option::Option::Some(DocErrorCode::DocFilePathInvalid),
100 => ::std::option::Option::Some(DocErrorCode::EditorUserNotLoginYet),
_ => ::std::option::Option::None _ => ::std::option::Option::None
} }
} }
fn values() -> &'static [Self] { fn values() -> &'static [Self] {
static values: &'static [DocErrorCode] = &[ static values: &'static [ErrorCode] = &[
DocErrorCode::Unknown, ErrorCode::DocIdInvalid,
DocErrorCode::EditorDBInternalError, ErrorCode::DocNotfound,
DocErrorCode::EditorDBConnFailed, ErrorCode::UserUnauthorized,
DocErrorCode::DocNameInvalid, ErrorCode::InternalError,
DocErrorCode::DocViewIdInvalid,
DocErrorCode::DocDescTooLong,
DocErrorCode::DocOpenFileError,
DocErrorCode::DocFilePathInvalid,
DocErrorCode::EditorUserNotLoginYet,
]; ];
values values
} }
@ -264,61 +249,48 @@ impl ::protobuf::ProtobufEnum for DocErrorCode {
fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| { descriptor.get(|| {
::protobuf::reflect::EnumDescriptor::new_pb_name::<DocErrorCode>("DocErrorCode", file_descriptor_proto()) ::protobuf::reflect::EnumDescriptor::new_pb_name::<ErrorCode>("ErrorCode", file_descriptor_proto())
}) })
} }
} }
impl ::std::marker::Copy for DocErrorCode { impl ::std::marker::Copy for ErrorCode {
} }
impl ::std::default::Default for DocErrorCode { impl ::std::default::Default for ErrorCode {
fn default() -> Self { fn default() -> Self {
DocErrorCode::Unknown ErrorCode::DocIdInvalid
} }
} }
impl ::protobuf::reflect::ProtobufValue for DocErrorCode { impl ::protobuf::reflect::ProtobufValue for ErrorCode {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self))
} }
} }
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0cerrors.proto\"?\n\x08DocError\x12!\n\x04code\x18\x01\x20\x01(\x0e2\ \n\x0cerrors.proto\"<\n\x08DocError\x12\x1e\n\x04code\x18\x01\x20\x01(\
\r.DocErrorCodeR\x04code\x12\x10\n\x03msg\x18\x02\x20\x01(\tR\x03msg*\ \x0e2\n.ErrorCodeR\x04code\x12\x10\n\x03msg\x18\x02\x20\x01(\tR\x03msg*Y\
\xd5\x01\n\x0cDocErrorCode\x12\x0b\n\x07Unknown\x10\0\x12\x19\n\x15Edito\ \n\tErrorCode\x12\x10\n\x0cDocIdInvalid\x10\0\x12\x0f\n\x0bDocNotfound\
rDBInternalError\x10\x01\x12\x16\n\x12EditorDBConnFailed\x10\x02\x12\x12\ \x10\x01\x12\x15\n\x10UserUnauthorized\x10\xe7\x07\x12\x12\n\rInternalEr\
\n\x0eDocNameInvalid\x10\n\x12\x14\n\x10DocViewIdInvalid\x10\x0b\x12\x12\ ror\x10\xe8\x07J\xd4\x02\n\x06\x12\x04\0\0\x0b\x01\n\x08\n\x01\x0c\x12\
\n\x0eDocDescTooLong\x10\x0c\x12\x14\n\x10DocOpenFileError\x10\r\x12\x16\ \x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x05\x01\n\n\n\x03\x04\0\x01\
\n\x12DocFilePathInvalid\x10\x0e\x12\x19\n\x15EditorUserNotLoginYet\x10d\ \x12\x03\x02\x08\x10\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x17\n\x0c\n\
J\xa1\x04\n\x06\x12\x04\0\0\x10\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\ \x05\x04\0\x02\0\x06\x12\x03\x03\x04\r\n\x0c\n\x05\x04\0\x02\0\x01\x12\
\n\x02\x04\0\x12\x04\x02\0\x05\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\x08\ \x03\x03\x0e\x12\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x15\x16\n\x0b\n\
\x10\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x1a\n\x0c\n\x05\x04\0\x02\0\ \x04\x04\0\x02\x01\x12\x03\x04\x04\x13\n\x0c\n\x05\x04\0\x02\x01\x05\x12\
\x06\x12\x03\x03\x04\x10\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x11\x15\ \x03\x04\x04\n\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x04\x0b\x0e\n\x0c\n\
\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x18\x19\n\x0b\n\x04\x04\0\x02\ \x05\x04\0\x02\x01\x03\x12\x03\x04\x11\x12\n\n\n\x02\x05\0\x12\x04\x06\0\
\x01\x12\x03\x04\x04\x13\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x04\x04\n\ \x0b\x01\n\n\n\x03\x05\0\x01\x12\x03\x06\x05\x0e\n\x0b\n\x04\x05\0\x02\0\
\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x04\x0b\x0e\n\x0c\n\x05\x04\0\x02\ \x12\x03\x07\x04\x15\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\x07\x04\x10\n\
\x01\x03\x12\x03\x04\x11\x12\n\n\n\x02\x05\0\x12\x04\x06\0\x10\x01\n\n\n\ \x0c\n\x05\x05\0\x02\0\x02\x12\x03\x07\x13\x14\n\x0b\n\x04\x05\0\x02\x01\
\x03\x05\0\x01\x12\x03\x06\x05\x11\n\x0b\n\x04\x05\0\x02\0\x12\x03\x07\ \x12\x03\x08\x04\x14\n\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\x08\x04\x0f\n\
\x04\x10\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\x07\x04\x0b\n\x0c\n\x05\x05\ \x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x08\x12\x13\n\x0b\n\x04\x05\0\x02\
\0\x02\0\x02\x12\x03\x07\x0e\x0f\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x08\ \x02\x12\x03\t\x04\x1b\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\t\x04\x14\n\
\x04\x1e\n\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\x08\x04\x19\n\x0c\n\x05\ \x0c\n\x05\x05\0\x02\x02\x02\x12\x03\t\x17\x1a\n\x0b\n\x04\x05\0\x02\x03\
\x05\0\x02\x01\x02\x12\x03\x08\x1c\x1d\n\x0b\n\x04\x05\0\x02\x02\x12\x03\ \x12\x03\n\x04\x19\n\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\n\x04\x11\n\x0c\
\t\x04\x1b\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\t\x04\x16\n\x0c\n\x05\ \n\x05\x05\0\x02\x03\x02\x12\x03\n\x14\x18b\x06proto3\
\x05\0\x02\x02\x02\x12\x03\t\x19\x1a\n\x0b\n\x04\x05\0\x02\x03\x12\x03\n\
\x04\x18\n\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\n\x04\x12\n\x0c\n\x05\x05\
\0\x02\x03\x02\x12\x03\n\x15\x17\n\x0b\n\x04\x05\0\x02\x04\x12\x03\x0b\
\x04\x1a\n\x0c\n\x05\x05\0\x02\x04\x01\x12\x03\x0b\x04\x14\n\x0c\n\x05\
\x05\0\x02\x04\x02\x12\x03\x0b\x17\x19\n\x0b\n\x04\x05\0\x02\x05\x12\x03\
\x0c\x04\x18\n\x0c\n\x05\x05\0\x02\x05\x01\x12\x03\x0c\x04\x12\n\x0c\n\
\x05\x05\0\x02\x05\x02\x12\x03\x0c\x15\x17\n\x0b\n\x04\x05\0\x02\x06\x12\
\x03\r\x04\x1a\n\x0c\n\x05\x05\0\x02\x06\x01\x12\x03\r\x04\x14\n\x0c\n\
\x05\x05\0\x02\x06\x02\x12\x03\r\x17\x19\n\x0b\n\x04\x05\0\x02\x07\x12\
\x03\x0e\x04\x1c\n\x0c\n\x05\x05\0\x02\x07\x01\x12\x03\x0e\x04\x16\n\x0c\
\n\x05\x05\0\x02\x07\x02\x12\x03\x0e\x19\x1b\n\x0b\n\x04\x05\0\x02\x08\
\x12\x03\x0f\x04\x20\n\x0c\n\x05\x05\0\x02\x08\x01\x12\x03\x0f\x04\x19\n\
\x0c\n\x05\x05\0\x02\x08\x02\x12\x03\x0f\x1c\x1fb\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -27,8 +27,8 @@
pub enum EditorEvent { pub enum EditorEvent {
CreateDoc = 0, CreateDoc = 0,
UpdateDoc = 1, UpdateDoc = 1,
ReadDocInfo = 2, ReadDoc = 2,
ReadDocData = 3, DeleteDoc = 3,
} }
impl ::protobuf::ProtobufEnum for EditorEvent { impl ::protobuf::ProtobufEnum for EditorEvent {
@ -40,8 +40,8 @@ impl ::protobuf::ProtobufEnum for EditorEvent {
match value { match value {
0 => ::std::option::Option::Some(EditorEvent::CreateDoc), 0 => ::std::option::Option::Some(EditorEvent::CreateDoc),
1 => ::std::option::Option::Some(EditorEvent::UpdateDoc), 1 => ::std::option::Option::Some(EditorEvent::UpdateDoc),
2 => ::std::option::Option::Some(EditorEvent::ReadDocInfo), 2 => ::std::option::Option::Some(EditorEvent::ReadDoc),
3 => ::std::option::Option::Some(EditorEvent::ReadDocData), 3 => ::std::option::Option::Some(EditorEvent::DeleteDoc),
_ => ::std::option::Option::None _ => ::std::option::Option::None
} }
} }
@ -50,8 +50,8 @@ impl ::protobuf::ProtobufEnum for EditorEvent {
static values: &'static [EditorEvent] = &[ static values: &'static [EditorEvent] = &[
EditorEvent::CreateDoc, EditorEvent::CreateDoc,
EditorEvent::UpdateDoc, EditorEvent::UpdateDoc,
EditorEvent::ReadDocInfo, EditorEvent::ReadDoc,
EditorEvent::ReadDocData, EditorEvent::DeleteDoc,
]; ];
values values
} }
@ -80,19 +80,19 @@ impl ::protobuf::reflect::ProtobufValue for EditorEvent {
} }
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0bevent.proto*M\n\x0bEditorEvent\x12\r\n\tCreateDoc\x10\0\x12\r\n\tU\ \n\x0bevent.proto*G\n\x0bEditorEvent\x12\r\n\tCreateDoc\x10\0\x12\r\n\tU\
pdateDoc\x10\x01\x12\x0f\n\x0bReadDocInfo\x10\x02\x12\x0f\n\x0bReadDocDa\ pdateDoc\x10\x01\x12\x0b\n\x07ReadDoc\x10\x02\x12\r\n\tDeleteDoc\x10\x03\
ta\x10\x03J\xce\x01\n\x06\x12\x04\0\0\x07\x01\n\x08\n\x01\x0c\x12\x03\0\ J\xce\x01\n\x06\x12\x04\0\0\x07\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\
\0\x12\n\n\n\x02\x05\0\x12\x04\x02\0\x07\x01\n\n\n\x03\x05\0\x01\x12\x03\ \n\x02\x05\0\x12\x04\x02\0\x07\x01\n\n\n\x03\x05\0\x01\x12\x03\x02\x05\
\x02\x05\x10\n\x0b\n\x04\x05\0\x02\0\x12\x03\x03\x04\x12\n\x0c\n\x05\x05\ \x10\n\x0b\n\x04\x05\0\x02\0\x12\x03\x03\x04\x12\n\x0c\n\x05\x05\0\x02\0\
\0\x02\0\x01\x12\x03\x03\x04\r\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x03\ \x01\x12\x03\x03\x04\r\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x03\x10\x11\n\
\x10\x11\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x04\x04\x12\n\x0c\n\x05\x05\0\ \x0b\n\x04\x05\0\x02\x01\x12\x03\x04\x04\x12\n\x0c\n\x05\x05\0\x02\x01\
\x02\x01\x01\x12\x03\x04\x04\r\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x04\ \x01\x12\x03\x04\x04\r\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x04\x10\x11\
\x10\x11\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x05\x04\x14\n\x0c\n\x05\x05\0\ \n\x0b\n\x04\x05\0\x02\x02\x12\x03\x05\x04\x10\n\x0c\n\x05\x05\0\x02\x02\
\x02\x02\x01\x12\x03\x05\x04\x0f\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\ \x01\x12\x03\x05\x04\x0b\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x05\x0e\
\x05\x12\x13\n\x0b\n\x04\x05\0\x02\x03\x12\x03\x06\x04\x14\n\x0c\n\x05\ \x0f\n\x0b\n\x04\x05\0\x02\x03\x12\x03\x06\x04\x12\n\x0c\n\x05\x05\0\x02\
\x05\0\x02\x03\x01\x12\x03\x06\x04\x0f\n\x0c\n\x05\x05\0\x02\x03\x02\x12\ \x03\x01\x12\x03\x06\x04\r\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\x06\x10\
\x03\x06\x12\x13b\x06proto3\ \x11b\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -6,6 +6,9 @@ pub use doc_modify::*;
mod doc_create; mod doc_create;
pub use doc_create::*; pub use doc_create::*;
mod observable;
pub use observable::*;
mod errors; mod errors;
pub use errors::*; pub use errors::*;

View File

@ -0,0 +1,92 @@
// 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 `observable.proto`
/// Generated files are compatible only with the same version
/// of protobuf runtime.
// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_22_1;
#[derive(Clone,PartialEq,Eq,Debug,Hash)]
pub enum DocObservable {
UserCreateDoc = 0,
}
impl ::protobuf::ProtobufEnum for DocObservable {
fn value(&self) -> i32 {
*self as i32
}
fn from_i32(value: i32) -> ::std::option::Option<DocObservable> {
match value {
0 => ::std::option::Option::Some(DocObservable::UserCreateDoc),
_ => ::std::option::Option::None
}
}
fn values() -> &'static [Self] {
static values: &'static [DocObservable] = &[
DocObservable::UserCreateDoc,
];
values
}
fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| {
::protobuf::reflect::EnumDescriptor::new_pb_name::<DocObservable>("DocObservable", file_descriptor_proto())
})
}
}
impl ::std::marker::Copy for DocObservable {
}
impl ::std::default::Default for DocObservable {
fn default() -> Self {
DocObservable::UserCreateDoc
}
}
impl ::protobuf::reflect::ProtobufValue for DocObservable {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self))
}
}
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x10observable.proto*\"\n\rDocObservable\x12\x11\n\rUserCreateDoc\x10\
\0JS\n\x06\x12\x04\0\0\x04\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\
\x05\0\x12\x04\x02\0\x04\x01\n\n\n\x03\x05\0\x01\x12\x03\x02\x05\x12\n\
\x0b\n\x04\x05\0\x02\0\x12\x03\x03\x04\x16\n\x0c\n\x05\x05\0\x02\0\x01\
\x12\x03\x03\x04\x11\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x03\x14\x15b\
\x06proto3\
";
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()
})
}

View File

@ -2,16 +2,13 @@ syntax = "proto3";
message CreateDocRequest { message CreateDocRequest {
string id = 1; string id = 1;
string name = 2; string data = 2;
string desc = 3;
string text = 4;
} }
message DocInfo { message CreateDocParams {
string id = 1; string id = 1;
string name = 2; string data = 2;
string desc = 3;
string path = 4;
} }
message DocData { message Doc {
string text = 1; string id = 1;
string data = 2;
} }

View File

@ -2,7 +2,9 @@ syntax = "proto3";
message UpdateDocRequest { message UpdateDocRequest {
string id = 1; string id = 1;
oneof one_of_name { string name = 2; }; oneof one_of_data { string data = 2; };
oneof one_of_desc { string desc = 3; }; }
oneof one_of_text { string text = 4; }; message UpdateDocParams {
string id = 1;
oneof one_of_data { string data = 2; };
} }

View File

@ -3,7 +3,6 @@ syntax = "proto3";
message QueryDocRequest { message QueryDocRequest {
string doc_id = 1; string doc_id = 1;
} }
message QueryDocDataRequest { message QueryDocParams {
string doc_id = 1; string doc_id = 1;
string path = 2;
} }

View File

@ -1,17 +1,12 @@
syntax = "proto3"; syntax = "proto3";
message DocError { message DocError {
DocErrorCode code = 1; ErrorCode code = 1;
string msg = 2; string msg = 2;
} }
enum DocErrorCode { enum ErrorCode {
Unknown = 0; DocIdInvalid = 0;
EditorDBInternalError = 1; DocNotfound = 1;
EditorDBConnFailed = 2; UserUnauthorized = 999;
DocNameInvalid = 10; InternalError = 1000;
DocViewIdInvalid = 11;
DocDescTooLong = 12;
DocOpenFileError = 13;
DocFilePathInvalid = 14;
EditorUserNotLoginYet = 100;
} }

View File

@ -3,6 +3,6 @@ syntax = "proto3";
enum EditorEvent { enum EditorEvent {
CreateDoc = 0; CreateDoc = 0;
UpdateDoc = 1; UpdateDoc = 1;
ReadDocInfo = 2; ReadDoc = 2;
ReadDocData = 3; DeleteDoc = 3;
} }

View File

@ -0,0 +1,5 @@
syntax = "proto3";
enum DocObservable {
UserCreateDoc = 0;
}

View File

@ -1,42 +1,118 @@
use crate::{ use crate::{
entities::doc::{CreateDocParams, DocInfo, UpdateDocParams}, entities::doc::{CreateDocParams, Doc, QueryDocParams, UpdateDocParams},
errors::DocError, errors::DocError,
module::DocumentDatabase, module::{DocumentDatabase, DocumentUser},
services::server::Server,
sql_tables::doc::{DocTable, DocTableChangeset, DocTableSql}, sql_tables::doc::{DocTable, DocTableChangeset, DocTableSql},
}; };
use std::sync::Arc; use std::sync::Arc;
pub struct DocController { pub struct DocController {
server: Server,
sql: Arc<DocTableSql>, sql: Arc<DocTableSql>,
user: Arc<dyn DocumentUser>,
database: Arc<dyn DocumentDatabase>,
} }
impl DocController { impl DocController {
pub(crate) fn new(database: Arc<dyn DocumentDatabase>) -> Self { pub(crate) fn new(database: Arc<dyn DocumentDatabase>, server: Server, user: Arc<dyn DocumentUser>) -> Self {
let sql = Arc::new(DocTableSql { database }); let sql = Arc::new(DocTableSql {});
Self { sql } Self {
sql,
server,
user,
database,
}
} }
pub(crate) async fn create_doc( pub(crate) async fn create_doc(&self, params: CreateDocParams) -> Result<Doc, DocError> {
&self, let doc = self.create_doc_on_server(params).await?;
params: CreateDocParams, let doc_table = DocTable::new(doc.clone());
path: &str,
) -> Result<DocInfo, DocError> { let conn = self.database.db_connection()?;
let doc_table = DocTable::new(params, path); let _ = self.sql.create_doc_table(doc_table, &*conn)?;
let doc: DocInfo = doc_table.clone().into();
let _ = self.sql.create_doc_table(doc_table)?;
Ok(doc) Ok(doc)
} }
pub(crate) async fn update_doc(&self, params: UpdateDocParams) -> Result<(), DocError> { pub(crate) async fn update_doc(&self, params: UpdateDocParams) -> Result<(), DocError> {
let changeset = DocTableChangeset::new(params); let changeset = DocTableChangeset::new(params.clone());
let _ = self.sql.update_doc_table(changeset)?; let conn = self.database.db_connection()?;
let _ = self.sql.update_doc_table(changeset, &*conn)?;
let _ = self.update_doc_on_server(params)?;
Ok(()) Ok(())
} }
pub(crate) async fn read_doc(&self, doc_id: &str) -> Result<DocInfo, DocError> { pub(crate) async fn read_doc(&self, params: QueryDocParams) -> Result<Doc, DocError> {
let doc_table = self.sql.read_doc_table(doc_id)?; let conn = self.database.db_connection()?;
let doc_desc: DocInfo = doc_table.into(); let doc: Doc = self.sql.read_doc_table(&params.doc_id, &*conn)?.into();
Ok(doc_desc)
let _ = self.read_doc_on_server(params)?;
Ok(doc)
}
pub(crate) async fn delete_doc(&self, params: QueryDocParams) -> Result<(), DocError> {
let conn = self.database.db_connection()?;
let _ = self.sql.delete_doc(&params.doc_id, &*conn)?;
let _ = self.delete_doc_on_server(params)?;
Ok(())
}
}
impl DocController {
#[tracing::instrument(level = "debug", skip(self), err)]
async fn create_doc_on_server(&self, params: CreateDocParams) -> Result<Doc, DocError> {
let token = self.user.token()?;
let doc = self.server.create_doc(&token, params).await?;
Ok(doc)
}
#[tracing::instrument(level = "debug", skip(self, params), err)]
fn update_doc_on_server(&self, params: UpdateDocParams) -> Result<(), DocError> {
let token = self.user.token()?;
let server = self.server.clone();
tokio::spawn(async move {
match server.update_doc(&token, params).await {
Ok(_) => {},
Err(e) => {
// TODO: retry?
log::error!("Update doc failed: {}", e);
},
}
});
Ok(())
}
#[tracing::instrument(level = "debug", skip(self, params), err)]
fn read_doc_on_server(&self, params: QueryDocParams) -> Result<(), DocError> {
let token = self.user.token()?;
let server = self.server.clone();
tokio::spawn(async move {
// Opti: handle the error and retry?
let doc = server.read_doc(&token, params).await?;
// save to disk
// notify
Result::<(), DocError>::Ok(())
});
Ok(())
}
#[tracing::instrument(level = "debug", skip(self, params), err)]
fn delete_doc_on_server(&self, params: QueryDocParams) -> Result<(), DocError> {
let token = self.user.token()?;
let server = self.server.clone();
tokio::spawn(async move {
match server.delete_doc(&token, params).await {
Ok(_) => {},
Err(e) => {
// TODO: retry?
log::error!("Delete doc failed: {:?}", e);
},
}
});
Ok(())
} }
} }

View File

@ -1,2 +1,3 @@
pub mod doc_controller; pub mod doc_controller;
pub mod file_manager; pub mod file_manager;
pub mod server;

View File

@ -0,0 +1,29 @@
use flowy_net::{request::ResponseMiddleware, response::FlowyResponse};
use lazy_static::lazy_static;
use std::sync::Arc;
lazy_static! {
pub(crate) static ref MIDDLEWARE: Arc<DocMiddleware> = Arc::new(DocMiddleware {});
}
pub(crate) struct DocMiddleware {}
impl ResponseMiddleware for DocMiddleware {
fn receive_response(&self, token: &Option<String>, response: &FlowyResponse) {
if let Some(error) = &response.error {
if error.is_unauthorized() {
log::error!("workspace user is unauthorized");
match token {
None => {},
Some(token) => {
// let error =
// WorkspaceError::new(ErrorCode::UserUnauthorized, "");
// observable(token,
// WorkspaceObservable::UserUnauthorized).error(error).
// build()
},
}
}
}
}
}

View File

@ -0,0 +1,32 @@
mod middleware;
mod server_api;
mod server_api_mock;
pub use server_api::*;
// TODO: ignore mock files in production
use crate::{
entities::doc::{CreateDocParams, Doc, QueryDocParams, UpdateDocParams},
errors::DocError,
};
use flowy_infra::future::ResultFuture;
pub use server_api_mock::*;
use std::sync::Arc;
pub(crate) type Server = Arc<dyn DocumentServerAPI + Send + Sync>;
pub trait DocumentServerAPI {
fn create_doc(&self, token: &str, params: CreateDocParams) -> ResultFuture<Doc, DocError>;
fn read_doc(&self, token: &str, params: QueryDocParams) -> ResultFuture<Option<Doc>, DocError>;
fn update_doc(&self, token: &str, params: UpdateDocParams) -> ResultFuture<(), DocError>;
fn delete_doc(&self, token: &str, params: QueryDocParams) -> ResultFuture<(), DocError>;
}
pub(crate) fn construct_doc_server() -> Arc<dyn DocumentServerAPI + Send + Sync> {
if cfg!(feature = "http_server") {
Arc::new(DocServer {})
} else {
Arc::new(DocServerMock {})
}
}

View File

@ -0,0 +1,33 @@
use crate::{
entities::doc::{CreateDocParams, Doc, QueryDocParams, UpdateDocParams},
errors::DocError,
services::server::DocumentServerAPI,
};
use flowy_infra::future::ResultFuture;
use flowy_net::{config::HEADER_TOKEN, request::HttpRequestBuilder};
pub struct DocServer {}
impl DocumentServerAPI for DocServer {
fn create_doc(&self, token: &str, params: CreateDocParams) -> ResultFuture<Doc, DocError> { unimplemented!() }
fn read_doc(&self, token: &str, params: QueryDocParams) -> ResultFuture<Option<Doc>, DocError> { unimplemented!() }
fn update_doc(&self, token: &str, params: UpdateDocParams) -> ResultFuture<(), DocError> { unimplemented!() }
fn delete_doc(&self, token: &str, params: QueryDocParams) -> ResultFuture<(), DocError> { unimplemented!() }
}
pub(crate) fn request_builder() -> HttpRequestBuilder { HttpRequestBuilder::new().middleware(super::middleware::MIDDLEWARE.clone()) }
pub async fn create_doc_request(token: &str, params: CreateDocParams, url: &str) -> Result<Doc, DocError> {
let doc = request_builder()
.post(&url.to_owned())
.header(HEADER_TOKEN, token)
.protobuf(params)?
.send()
.await?
.response()
.await?;
Ok(doc)
}

View File

@ -0,0 +1,27 @@
use crate::{
entities::doc::{CreateDocParams, Doc, QueryDocParams, UpdateDocParams},
errors::DocError,
services::server::DocumentServerAPI,
};
use flowy_infra::{future::ResultFuture, uuid};
pub struct DocServerMock {}
impl DocumentServerAPI for DocServerMock {
fn create_doc(&self, _token: &str, _params: CreateDocParams) -> ResultFuture<Doc, DocError> {
let uuid = uuid();
let doc = Doc {
id: uuid,
data: "".to_string(),
};
ResultFuture::new(async { Ok(doc) })
}
fn read_doc(&self, _token: &str, _params: QueryDocParams) -> ResultFuture<Option<Doc>, DocError> {
ResultFuture::new(async { Ok(None) })
}
fn update_doc(&self, _token: &str, _params: UpdateDocParams) -> ResultFuture<(), DocError> { ResultFuture::new(async { Ok(()) }) }
fn delete_doc(&self, _token: &str, _params: QueryDocParams) -> ResultFuture<(), DocError> { ResultFuture::new(async { Ok(()) }) }
}

View File

@ -6,34 +6,32 @@ use crate::{
use flowy_database::{ use flowy_database::{
prelude::*, prelude::*,
schema::{doc_table, doc_table::dsl}, schema::{doc_table, doc_table::dsl},
SqliteConnection,
}; };
use std::sync::Arc; use std::sync::Arc;
pub struct DocTableSql {}
pub struct DocTableSql {
pub database: Arc<dyn DocumentDatabase>,
}
impl DocTableSql { impl DocTableSql {
pub(crate) fn create_doc_table(&self, doc_table: DocTable) -> Result<(), DocError> { pub(crate) fn create_doc_table(&self, doc_table: DocTable, conn: &SqliteConnection) -> Result<(), DocError> {
let conn = self.database.db_connection()?; let _ = diesel::insert_into(doc_table::table).values(doc_table).execute(conn)?;
let _ = diesel::insert_into(doc_table::table).values(doc_table).execute(&*conn)?;
Ok(()) Ok(())
} }
pub(crate) fn update_doc_table(&self, changeset: DocTableChangeset) -> Result<(), DocError> { pub(crate) fn update_doc_table(&self, changeset: DocTableChangeset, conn: &SqliteConnection) -> Result<(), DocError> {
let conn = self.database.db_connection()?; diesel_update_table!(doc_table, changeset, conn);
diesel_update_table!(doc_table, changeset, &*conn);
Ok(()) Ok(())
} }
pub(crate) fn read_doc_table(&self, doc_id: &str) -> Result<DocTable, DocError> { pub(crate) fn read_doc_table(&self, doc_id: &str, conn: &SqliteConnection) -> Result<DocTable, DocError> {
let doc_table = dsl::doc_table let doc_table = dsl::doc_table.filter(doc_table::id.eq(doc_id)).first::<DocTable>(conn)?;
.filter(doc_table::id.eq(doc_id))
.first::<DocTable>(&*(self.database.db_connection()?))?;
Ok(doc_table) Ok(doc_table)
} }
#[allow(dead_code)] #[allow(dead_code)]
pub(crate) fn delete_doc(&self, _view_id: &str) -> Result<(), DocError> { unimplemented!() } pub(crate) fn delete_doc(&self, doc_id: &str, conn: &SqliteConnection) -> Result<DocTable, DocError> {
let doc_table = dsl::doc_table.filter(doc_table::id.eq(doc_id)).first::<DocTable>(conn)?;
diesel_delete_table!(doc_table, doc_id, conn);
Ok(doc_table)
}
} }

View File

@ -1,4 +1,4 @@
use crate::entities::doc::{CreateDocParams, DocInfo, UpdateDocParams}; use crate::entities::doc::{CreateDocParams, Doc, UpdateDocParams};
use flowy_database::schema::doc_table; use flowy_database::schema::doc_table;
use flowy_infra::timestamp; use flowy_infra::timestamp;
@ -6,24 +6,15 @@ use flowy_infra::timestamp;
#[table_name = "doc_table"] #[table_name = "doc_table"]
pub(crate) struct DocTable { pub(crate) struct DocTable {
pub id: String, pub id: String,
pub name: String, pub data: String,
pub desc: String,
pub path: String,
pub modified_time: i64,
pub create_time: i64,
pub version: i64, pub version: i64,
} }
impl DocTable { impl DocTable {
pub fn new(params: CreateDocParams, path: &str) -> Self { pub fn new(doc: Doc) -> Self {
let time = timestamp();
Self { Self {
id: params.id, id: doc.id,
name: params.name, data: "".to_owned(),
desc: params.desc,
path: path.to_owned(),
modified_time: time,
create_time: time,
version: 0, version: 0,
} }
} }
@ -33,27 +24,23 @@ impl DocTable {
#[table_name = "doc_table"] #[table_name = "doc_table"]
pub(crate) struct DocTableChangeset { pub(crate) struct DocTableChangeset {
pub id: String, pub id: String,
pub name: Option<String>, pub data: Option<String>,
pub desc: Option<String>,
} }
impl DocTableChangeset { impl DocTableChangeset {
pub(crate) fn new(params: UpdateDocParams) -> Self { pub(crate) fn new(params: UpdateDocParams) -> Self {
Self { Self {
id: params.id, id: params.id,
name: params.name, data: params.data,
desc: params.desc,
} }
} }
} }
impl std::convert::Into<DocInfo> for DocTable { impl std::convert::Into<Doc> for DocTable {
fn into(self) -> DocInfo { fn into(self) -> Doc {
DocInfo { Doc {
id: self.id, id: self.id,
name: self.name, data: self.data,
desc: self.desc,
path: self.path,
} }
} }
} }

View File

@ -4,28 +4,28 @@ use flowy_document::{entities::doc::*, event::EditorEvent::*};
use flowy_infra::uuid; use flowy_infra::uuid;
use flowy_test::prelude::*; use flowy_test::prelude::*;
pub fn create_doc(sdk: &FlowyTestSDK, name: &str, desc: &str, text: &str) -> DocInfo { pub fn create_doc(sdk: &FlowyTestSDK, name: &str, desc: &str, text: &str) -> Doc {
let request = CreateDocRequest { let request = CreateDocRequest {
id: uuid(), id: uuid(),
name: name.to_owned(), name: name.to_owned(),
desc: desc.to_owned(), desc: desc.to_owned(),
text: text.to_owned(), data: text.to_owned(),
}; };
let doc = DocTest::new(sdk.clone()) let doc = DocTest::new(sdk.clone())
.event(CreateDoc) .event(CreateDoc)
.request(request) .request(request)
.sync_send() .sync_send()
.parse::<DocInfo>(); .parse::<Doc>();
doc doc
} }
pub fn save_doc(sdk: &FlowyTestSDK, desc: &DocInfo, content: &str) { pub fn save_doc(sdk: &FlowyTestSDK, desc: &Doc, content: &str) {
let request = UpdateDocRequest { let request = UpdateDocRequest {
id: desc.id.clone(), id: desc.id.clone(),
name: Some(desc.name.clone()), name: Some(desc.name.clone()),
desc: Some(desc.desc.clone()), desc: Some(desc.desc.clone()),
text: Some(content.to_owned()), data: Some(content.to_owned()),
}; };
let _ = DocTest::new(sdk.clone()).event(UpdateDoc).request(request).sync_send(); let _ = DocTest::new(sdk.clone()).event(UpdateDoc).request(request).sync_send();

View File

@ -27,7 +27,7 @@ impl ServerError {
static_error!(internal, ErrorCode::InternalError); static_error!(internal, ErrorCode::InternalError);
static_error!(http, ErrorCode::HttpError); static_error!(http, ErrorCode::HttpError);
static_error!(payload_none, ErrorCode::PayloadUnexpectedNone); static_error!(payload_none, ErrorCode::PayloadUnexpectedNone);
static_error!(unauthorized, ErrorCode::Unauthorized); static_error!(unauthorized, ErrorCode::UserUnauthorized);
static_error!(password_not_match, ErrorCode::PasswordNotMatch); static_error!(password_not_match, ErrorCode::PasswordNotMatch);
static_error!(params_invalid, ErrorCode::ParamsInvalid); static_error!(params_invalid, ErrorCode::ParamsInvalid);
static_error!(connect_timeout, ErrorCode::ConnectTimeout); static_error!(connect_timeout, ErrorCode::ConnectTimeout);
@ -44,7 +44,7 @@ impl ServerError {
pub fn is_not_found(&self) -> bool { self.code == ErrorCode::RecordNotFound } pub fn is_not_found(&self) -> bool { self.code == ErrorCode::RecordNotFound }
pub fn is_unauthorized(&self) -> bool { self.code == ErrorCode::Unauthorized } pub fn is_unauthorized(&self) -> bool { self.code == ErrorCode::UserUnauthorized }
} }
pub fn invalid_params<T: Debug>(e: T) -> ServerError { ServerError::params_invalid().context(e) } pub fn invalid_params<T: Debug>(e: T) -> ServerError { ServerError::params_invalid().context(e) }
@ -69,7 +69,7 @@ impl std::convert::From<&ServerError> for FlowyResponse {
#[repr(u16)] #[repr(u16)]
pub enum ErrorCode { pub enum ErrorCode {
#[display(fmt = "Unauthorized")] #[display(fmt = "Unauthorized")]
Unauthorized = 1, UserUnauthorized = 1,
#[display(fmt = "Payload too large")] #[display(fmt = "Payload too large")]
PayloadOverflow = 2, PayloadOverflow = 2,
#[display(fmt = "Payload deserialize failed")] #[display(fmt = "Payload deserialize failed")]

View File

@ -27,5 +27,5 @@ tokio = { version = "1", features = ["full"]}
futures-util = "0.3.15" futures-util = "0.3.15"
[features] [features]
http_server = ["flowy-user/http_server", "flowy-workspace/http_server"] http_server = ["flowy-user/http_server", "flowy-workspace/http_server", "flowy-document/http_server"]
use_bunyan = ["flowy-log/use_bunyan"] use_bunyan = ["flowy-log/use_bunyan"]

View File

@ -1,6 +1,6 @@
use flowy_database::DBConnection; use flowy_database::DBConnection;
use flowy_document::{ use flowy_document::{
errors::{DocError, DocErrorCode, ErrorBuilder}, errors::{DocError, ErrorBuilder, ErrorCode},
module::{DocumentDatabase, DocumentUser}, module::{DocumentDatabase, DocumentUser},
}; };
use flowy_user::prelude::UserSession; use flowy_user::prelude::UserSession;
@ -14,7 +14,7 @@ impl DocumentDatabase for EditorDatabaseImpl {
fn db_connection(&self) -> Result<DBConnection, DocError> { fn db_connection(&self) -> Result<DBConnection, DocError> {
self.user_session self.user_session
.db_conn() .db_conn()
.map_err(|e| ErrorBuilder::new(DocErrorCode::EditorDBConnFailed).error(e).build()) .map_err(|e| ErrorBuilder::new(ErrorCode::InternalError).error(e).build())
} }
} }
@ -27,7 +27,7 @@ impl DocumentUser for EditorUserImpl {
let dir = self let dir = self
.user_session .user_session
.user_dir() .user_dir()
.map_err(|e| ErrorBuilder::new(DocErrorCode::EditorUserNotLoginYet).error(e).build())?; .map_err(|e| ErrorBuilder::new(ErrorCode::EditorUserNotLoginYet).error(e).build())?;
let doc_dir = format!("{}/doc", dir); let doc_dir = format!("{}/doc", dir);
if !Path::new(&doc_dir).exists() { if !Path::new(&doc_dir).exists() {
@ -36,4 +36,16 @@ impl DocumentUser for EditorUserImpl {
} }
Ok(doc_dir) Ok(doc_dir)
} }
fn user_id(&self) -> Result<String, DocError> {
self.user_session
.user_id()
.map_err(|e| ErrorBuilder::new(ErrorCode::InternalError).error(e).build())
}
fn token(&self) -> Result<String, DocError> {
self.user_session
.token()
.map_err(|e| ErrorBuilder::new(ErrorCode::InternalError).error(e).build())
}
} }

View File

@ -106,7 +106,7 @@ impl std::convert::From<flowy_net::errors::ServerError> for UserError {
use flowy_net::errors::ErrorCode as ServerErrorCode; use flowy_net::errors::ErrorCode as ServerErrorCode;
fn server_error_to_user_error(code: ServerErrorCode) -> ErrorCode { fn server_error_to_user_error(code: ServerErrorCode) -> ErrorCode {
match code { match code {
ServerErrorCode::Unauthorized => ErrorCode::UserUnauthorized, ServerErrorCode::UserUnauthorized => ErrorCode::UserUnauthorized,
ServerErrorCode::PasswordNotMatch => ErrorCode::PasswordNotMatch, ServerErrorCode::PasswordNotMatch => ErrorCode::PasswordNotMatch,
ServerErrorCode::RecordNotFound => ErrorCode::UserNotExist, ServerErrorCode::RecordNotFound => ErrorCode::UserNotExist,
_ => ErrorCode::InternalError, _ => ErrorCode::InternalError,

View File

@ -109,7 +109,7 @@ impl flowy_infra::errors::Build<ErrorCode> for WorkspaceError {
use flowy_net::errors::ErrorCode as ServerErrorCode; use flowy_net::errors::ErrorCode as ServerErrorCode;
fn server_error_to_workspace_error(code: ServerErrorCode) -> ErrorCode { fn server_error_to_workspace_error(code: ServerErrorCode) -> ErrorCode {
match code { match code {
ServerErrorCode::Unauthorized => ErrorCode::UserUnauthorized, ServerErrorCode::UserUnauthorized => ErrorCode::UserUnauthorized,
ServerErrorCode::RecordNotFound => ErrorCode::RecordNotFound, ServerErrorCode::RecordNotFound => ErrorCode::RecordNotFound,
_ => ErrorCode::InternalError, _ => ErrorCode::InternalError,
} }

View File

@ -1,3 +1,3 @@
pub(crate) mod observable; mod observable;
pub(crate) use observable::*; pub(crate) use observable::*;

View File

@ -1,27 +1,20 @@
use flowy_derive::ProtoBuf_Enum; use flowy_derive::ProtoBuf_Enum;
use flowy_observable::ObservableBuilder; use flowy_observable::ObservableBuilder;
const OBSERVABLE_CATEGORY: &'static str = "Workspace"; const OBSERVABLE_CATEGORY: &'static str = "Workspace";
#[derive(ProtoBuf_Enum, Debug)] #[derive(ProtoBuf_Enum, Debug)]
pub(crate) enum WorkspaceObservable { pub(crate) enum WorkspaceObservable {
Unknown = 0, Unknown = 0,
UserCreateWorkspace = 10, UserCreateWorkspace = 10,
UserDeleteWorkspace = 11, UserDeleteWorkspace = 11,
WorkspaceUpdated = 12, WorkspaceUpdated = 12,
WorkspaceCreateApp = 13, WorkspaceCreateApp = 13,
WorkspaceDeleteApp = 14, WorkspaceDeleteApp = 14,
WorkspaceListUpdated = 15, WorkspaceListUpdated = 15,
AppUpdated = 21, AppUpdated = 21,
AppCreateView = 23, AppCreateView = 23,
AppDeleteView = 24, AppDeleteView = 24,
ViewUpdated = 31, ViewUpdated = 31,
UserUnauthorized = 100, UserUnauthorized = 100,
} }

View File

@ -32,14 +32,17 @@ impl AppController {
pub(crate) async fn create_app(&self, params: CreateAppParams) -> Result<App, WorkspaceError> { pub(crate) async fn create_app(&self, params: CreateAppParams) -> Result<App, WorkspaceError> {
let app = self.create_app_on_server(params).await?; let app = self.create_app_on_server(params).await?;
let app_table = AppTable::new(app.clone()); let app_table = AppTable::new(app.clone());
let conn = self.database.db_connection()?; let conn = &*self.database.db_connection()?;
let _ = self.sql.create_app(app_table, &*conn)?;
// Opti: transaction conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let _ = self.sql.create_app(app_table, &*conn)?;
let apps = self.read_local_apps(&app.workspace_id, &*conn)?; let apps = self.read_local_apps(&app.workspace_id, &*conn)?;
observable(&app.workspace_id, WorkspaceObservable::WorkspaceCreateApp) observable(&app.workspace_id, WorkspaceObservable::WorkspaceCreateApp)
.payload(apps) .payload(apps)
.build(); .build();
Ok(())
})?;
Ok(app) Ok(app)
} }
@ -47,21 +50,23 @@ impl AppController {
let app_table = self let app_table = self
.sql .sql
.read_app(&params.app_id, params.is_trash, &*self.database.db_connection()?)?; .read_app(&params.app_id, params.is_trash, &*self.database.db_connection()?)?;
let _ = self.read_app_on_server(params).await?; let _ = self.read_app_on_server(params)?;
Ok(app_table.into()) Ok(app_table.into())
} }
pub(crate) async fn delete_app(&self, app_id: &str) -> Result<(), WorkspaceError> { pub(crate) async fn delete_app(&self, app_id: &str) -> Result<(), WorkspaceError> {
let _ = self.delete_app_on_server(app_id); let conn = &*self.database.db_connection()?;
conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let conn = self.database.db_connection()?;
let app = self.sql.delete_app(app_id, &*conn)?; let app = self.sql.delete_app(app_id, &*conn)?;
// Opti: transaction
let apps = self.read_local_apps(&app.workspace_id, &*conn)?; let apps = self.read_local_apps(&app.workspace_id, &*conn)?;
observable(&app.workspace_id, WorkspaceObservable::WorkspaceDeleteApp) observable(&app.workspace_id, WorkspaceObservable::WorkspaceDeleteApp)
.payload(apps) .payload(apps)
.build(); .build();
Ok(()) Ok(())
})?;
let _ = self.delete_app_on_server(app_id);
Ok(())
} }
fn read_local_apps(&self, workspace_id: &str, conn: &SqliteConnection) -> Result<RepeatedApp, WorkspaceError> { fn read_local_apps(&self, workspace_id: &str, conn: &SqliteConnection) -> Result<RepeatedApp, WorkspaceError> {
@ -71,15 +76,18 @@ impl AppController {
} }
pub(crate) async fn update_app(&self, params: UpdateAppParams) -> Result<(), WorkspaceError> { pub(crate) async fn update_app(&self, params: UpdateAppParams) -> Result<(), WorkspaceError> {
let _ = self.update_app_on_server(params.clone()).await?; let changeset = AppTableChangeset::new(params.clone());
let changeset = AppTableChangeset::new(params);
let app_id = changeset.id.clone(); let app_id = changeset.id.clone();
let conn = self.database.db_connection()?; let conn = &*self.database.db_connection()?;
let _ = self.sql.update_app(changeset, &*conn)?; conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let app: App = self.sql.read_app(&app_id, false, &*conn)?.into(); let _ = self.sql.update_app(changeset, conn)?;
let app: App = self.sql.read_app(&app_id, false, conn)?.into();
observable(&app_id, WorkspaceObservable::AppUpdated).payload(app).build(); observable(&app_id, WorkspaceObservable::AppUpdated).payload(app).build();
Ok(()) Ok(())
})?;
let _ = self.update_app_on_server(params)?;
Ok(())
} }
} }
@ -93,7 +101,7 @@ impl AppController {
} }
#[tracing::instrument(level = "debug", skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn update_app_on_server(&self, params: UpdateAppParams) -> Result<(), WorkspaceError> { fn update_app_on_server(&self, params: UpdateAppParams) -> Result<(), WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let server = self.server.clone(); let server = self.server.clone();
spawn(async move { spawn(async move {
@ -109,7 +117,7 @@ impl AppController {
} }
#[tracing::instrument(level = "debug", skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn delete_app_on_server(&self, app_id: &str) -> Result<(), WorkspaceError> { fn delete_app_on_server(&self, app_id: &str) -> Result<(), WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let server = self.server.clone(); let server = self.server.clone();
let params = DeleteAppParams { let params = DeleteAppParams {
@ -128,7 +136,7 @@ impl AppController {
} }
#[tracing::instrument(level = "debug", skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn read_app_on_server(&self, params: QueryAppParams) -> Result<(), WorkspaceError> { fn read_app_on_server(&self, params: QueryAppParams) -> Result<(), WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let server = self.server.clone(); let server = self.server.clone();
spawn(async move { spawn(async move {

View File

@ -0,0 +1,30 @@
use lazy_static::lazy_static;
use std::sync::Arc;
lazy_static! {
pub(crate) static ref MIDDLEWARE: Arc<WorkspaceMiddleware> = Arc::new(WorkspaceMiddleware {});
}
use crate::{
errors::{ErrorCode, WorkspaceError},
observable::*,
};
use flowy_net::{request::ResponseMiddleware, response::FlowyResponse};
struct WorkspaceMiddleware {}
impl ResponseMiddleware for WorkspaceMiddleware {
fn receive_response(&self, token: &Option<String>, response: &FlowyResponse) {
if let Some(error) = &response.error {
if error.is_unauthorized() {
log::error!("workspace user is unauthorized");
match token {
None => {},
Some(token) => {
let error = WorkspaceError::new(ErrorCode::UserUnauthorized, "");
observable(token, WorkspaceObservable::UserUnauthorized).error(error).build()
},
}
}
}
}
}

View File

@ -1,7 +1,9 @@
mod middleware;
mod server_api; mod server_api;
mod server_api_mock; mod server_api_mock;
pub use server_api::*; pub use server_api::*;
// TODO: exclude mock files in production // TODO: ignore mock files in production
pub use server_api_mock::*; pub use server_api_mock::*;
use crate::{ use crate::{

View File

@ -20,7 +20,6 @@ use flowy_net::{
request::{HttpRequestBuilder, ResponseMiddleware}, request::{HttpRequestBuilder, ResponseMiddleware},
response::FlowyResponse, response::FlowyResponse,
}; };
use lazy_static::lazy_static;
use std::sync::Arc; use std::sync::Arc;
pub struct WorkspaceServer {} pub struct WorkspaceServer {}
@ -87,33 +86,7 @@ impl WorkspaceServerAPI for WorkspaceServer {
} }
} }
lazy_static! { pub(crate) fn request_builder() -> HttpRequestBuilder { HttpRequestBuilder::new().middleware(super::middleware::MIDDLEWARE.clone()) }
static ref MIDDLEWARE: Arc<WorkspaceMiddleware> = Arc::new(WorkspaceMiddleware {});
}
use crate::{errors::ErrorCode, observable::*};
struct WorkspaceMiddleware {}
impl ResponseMiddleware for WorkspaceMiddleware {
fn receive_response(&self, token: &Option<String>, response: &FlowyResponse) {
if let Some(error) = &response.error {
if error.is_unauthorized() {
log::error!("workspace user is unauthorized");
match token {
None => {},
Some(token) => {
let error = WorkspaceError::new(ErrorCode::UserUnauthorized, "");
observable(token, WorkspaceObservable::UserUnauthorized).error(error).build()
},
}
}
}
}
}
pub(crate) fn request_builder() -> HttpRequestBuilder { HttpRequestBuilder::new().middleware(MIDDLEWARE.clone()) }
pub async fn create_workspace_request(token: &str, params: CreateWorkspaceParams, url: &str) -> Result<Workspace, WorkspaceError> { pub async fn create_workspace_request(token: &str, params: CreateWorkspaceParams, url: &str) -> Result<Workspace, WorkspaceError> {
let workspace = request_builder() let workspace = request_builder()
.post(&url.to_owned()) .post(&url.to_owned())

View File

@ -38,7 +38,7 @@ impl ViewController {
let conn = &*self.database.db_connection()?; let conn = &*self.database.db_connection()?;
let view_table = ViewTable::new(view.clone()); let view_table = ViewTable::new(view.clone());
(conn).immediate_transaction::<_, WorkspaceError, _>(|| { conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let _ = self.sql.create_view(view_table, conn)?; let _ = self.sql.create_view(view_table, conn)?;
let repeated_view = self.read_local_views_belong_to(&view.belong_to_id, conn)?; let repeated_view = self.read_local_views_belong_to(&view.belong_to_id, conn)?;
observable(&view.belong_to_id, WorkspaceObservable::AppCreateView) observable(&view.belong_to_id, WorkspaceObservable::AppCreateView)
@ -61,7 +61,7 @@ impl ViewController {
pub(crate) async fn delete_view(&self, view_id: &str) -> Result<(), WorkspaceError> { pub(crate) async fn delete_view(&self, view_id: &str) -> Result<(), WorkspaceError> {
let conn = &*self.database.db_connection()?; let conn = &*self.database.db_connection()?;
(conn).immediate_transaction::<_, WorkspaceError, _>(|| { conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let view_table = self.sql.delete_view(view_id, conn)?; let view_table = self.sql.delete_view(view_id, conn)?;
let repeated_view = self.read_local_views_belong_to(&view_table.belong_to_id, conn)?; let repeated_view = self.read_local_views_belong_to(&view_table.belong_to_id, conn)?;
observable(&view_table.belong_to_id, WorkspaceObservable::AppDeleteView) observable(&view_table.belong_to_id, WorkspaceObservable::AppDeleteView)
@ -89,7 +89,7 @@ impl ViewController {
let changeset = ViewTableChangeset::new(params.clone()); let changeset = ViewTableChangeset::new(params.clone());
let view_id = changeset.id.clone(); let view_id = changeset.id.clone();
(conn).immediate_transaction::<_, WorkspaceError, _>(|| { conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let _ = self.sql.update_view(changeset, conn)?; let _ = self.sql.update_view(changeset, conn)?;
let view: View = self.sql.read_view(&view_id, None, conn)?.into(); let view: View = self.sql.read_view(&view_id, None, conn)?.into();
observable(&view_id, WorkspaceObservable::ViewUpdated).payload(view).build(); observable(&view_id, WorkspaceObservable::ViewUpdated).payload(view).build();
@ -110,7 +110,7 @@ impl ViewController {
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(skip(self), err)]
async fn update_view_on_server(&self, params: UpdateViewParams) -> Result<(), WorkspaceError> { fn update_view_on_server(&self, params: UpdateViewParams) -> Result<(), WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let server = self.server.clone(); let server = self.server.clone();
spawn(async move { spawn(async move {
@ -126,7 +126,7 @@ impl ViewController {
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(skip(self), err)]
async fn delete_view_on_server(&self, view_id: &str) -> Result<(), WorkspaceError> { fn delete_view_on_server(&self, view_id: &str) -> Result<(), WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let server = self.server.clone(); let server = self.server.clone();
let params = DeleteViewParams { let params = DeleteViewParams {
@ -145,7 +145,7 @@ impl ViewController {
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(skip(self), err)]
async fn read_view_on_server(&self, params: QueryViewParams) -> Result<(), WorkspaceError> { fn read_view_on_server(&self, params: QueryViewParams) -> Result<(), WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let server = self.server.clone(); let server = self.server.clone();
spawn(async move { spawn(async move {

View File

@ -5,7 +5,7 @@ use crate::{
}, },
errors::*, errors::*,
module::{WorkspaceDatabase, WorkspaceUser}, module::{WorkspaceDatabase, WorkspaceUser},
observable::{observable, WorkspaceObservable}, observable::*,
services::{helper::spawn, server::Server, AppController}, services::{helper::spawn, server::Server, AppController},
sql_tables::{ sql_tables::{
app::{AppTable, AppTableSql}, app::{AppTable, AppTableSql},
@ -65,7 +65,7 @@ impl WorkspaceController {
// immediately. EXCLUSIVE and IMMEDIATE are the same in WAL mode, but in // immediately. EXCLUSIVE and IMMEDIATE are the same in WAL mode, but in
// other journaling modes, EXCLUSIVE prevents other database connections from // other journaling modes, EXCLUSIVE prevents other database connections from
// reading the database while the transaction is underway. // reading the database while the transaction is underway.
(conn).immediate_transaction::<_, WorkspaceError, _>(|| { conn.immediate_transaction::<_, WorkspaceError, _>(|| {
self.workspace_sql.create_workspace(workspace_table, conn)?; self.workspace_sql.create_workspace(workspace_table, conn)?;
let repeated_workspace = self.read_local_workspaces(None, &user_id, conn)?; let repeated_workspace = self.read_local_workspaces(None, &user_id, conn)?;
observable(&token, WorkspaceObservable::UserCreateWorkspace) observable(&token, WorkspaceObservable::UserCreateWorkspace)
@ -79,12 +79,10 @@ impl WorkspaceController {
} }
pub(crate) async fn update_workspace(&self, params: UpdateWorkspaceParams) -> Result<(), WorkspaceError> { pub(crate) async fn update_workspace(&self, params: UpdateWorkspaceParams) -> Result<(), WorkspaceError> {
let _ = self.update_workspace_on_server(params.clone()).await?; let changeset = WorkspaceTableChangeset::new(params.clone());
let changeset = WorkspaceTableChangeset::new(params);
let workspace_id = changeset.id.clone(); let workspace_id = changeset.id.clone();
let conn = &*self.database.db_connection()?; let conn = &*self.database.db_connection()?;
(conn).immediate_transaction::<_, WorkspaceError, _>(|| { conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let _ = self.workspace_sql.update_workspace(changeset, conn)?; let _ = self.workspace_sql.update_workspace(changeset, conn)?;
let user_id = self.user.user_id()?; let user_id = self.user.user_id()?;
let workspace = self.read_local_workspace(workspace_id.clone(), &user_id, conn)?; let workspace = self.read_local_workspace(workspace_id.clone(), &user_id, conn)?;
@ -95,15 +93,16 @@ impl WorkspaceController {
Ok(()) Ok(())
})?; })?;
let _ = self.update_workspace_on_server(params)?;
Ok(()) Ok(())
} }
pub(crate) async fn delete_workspace(&self, workspace_id: &str) -> Result<(), WorkspaceError> { pub(crate) async fn delete_workspace(&self, workspace_id: &str) -> Result<(), WorkspaceError> {
let user_id = self.user.user_id()?; let user_id = self.user.user_id()?;
let token = self.user.token()?; let token = self.user.token()?;
let _ = self.delete_workspace_on_server(workspace_id).await?;
let conn = &*self.database.db_connection()?; let conn = &*self.database.db_connection()?;
(conn).immediate_transaction::<_, WorkspaceError, _>(|| { conn.immediate_transaction::<_, WorkspaceError, _>(|| {
let _ = self.workspace_sql.delete_workspace(workspace_id, conn)?; let _ = self.workspace_sql.delete_workspace(workspace_id, conn)?;
let repeated_workspace = self.read_local_workspaces(None, &user_id, conn)?; let repeated_workspace = self.read_local_workspaces(None, &user_id, conn)?;
observable(&token, WorkspaceObservable::UserDeleteWorkspace) observable(&token, WorkspaceObservable::UserDeleteWorkspace)
@ -113,6 +112,7 @@ impl WorkspaceController {
Ok(()) Ok(())
})?; })?;
let _ = self.delete_workspace_on_server(workspace_id)?;
Ok(()) Ok(())
} }
@ -132,10 +132,8 @@ impl WorkspaceController {
pub(crate) async fn read_workspaces(&self, params: QueryWorkspaceParams) -> Result<RepeatedWorkspace, WorkspaceError> { pub(crate) async fn read_workspaces(&self, params: QueryWorkspaceParams) -> Result<RepeatedWorkspace, WorkspaceError> {
let user_id = self.user.user_id()?; let user_id = self.user.user_id()?;
let _ = self.read_workspaces_on_server(user_id.clone(), params.clone()).await; let workspaces = self.read_local_workspaces(params.workspace_id.clone(), &user_id, &*self.database.db_connection()?)?;
let _ = self.read_workspaces_on_server(user_id.clone(), params.clone());
let conn = self.database.db_connection()?;
let workspaces = self.read_local_workspaces(params.workspace_id.clone(), &user_id, &*conn)?;
Ok(workspaces) Ok(workspaces)
} }
@ -145,10 +143,9 @@ impl WorkspaceController {
let params = QueryWorkspaceParams { let params = QueryWorkspaceParams {
workspace_id: Some(workspace_id.clone()), workspace_id: Some(workspace_id.clone()),
}; };
let _ = self.read_workspaces_on_server(user_id.clone(), params).await?; let workspace = self.read_local_workspace(workspace_id, &user_id, &*self.database.db_connection()?)?;
let conn = self.database.db_connection()?; let _ = self.read_workspaces_on_server(user_id.clone(), params)?;
let workspace = self.read_local_workspace(workspace_id, &user_id, &*conn)?;
Ok(workspace) Ok(workspace)
} }
@ -212,15 +209,15 @@ impl WorkspaceController {
Ok((token, server)) Ok((token, server))
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn create_workspace_on_server(&self, params: CreateWorkspaceParams) -> Result<Workspace, WorkspaceError> { async fn create_workspace_on_server(&self, params: CreateWorkspaceParams) -> Result<Workspace, WorkspaceError> {
let token = self.user.token()?; let token = self.user.token()?;
let workspace = self.server.create_workspace(&token, params).await?; let workspace = self.server.create_workspace(&token, params).await?;
Ok(workspace) Ok(workspace)
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn update_workspace_on_server(&self, params: UpdateWorkspaceParams) -> Result<(), WorkspaceError> { fn update_workspace_on_server(&self, params: UpdateWorkspaceParams) -> Result<(), WorkspaceError> {
let (token, server) = self.token_with_server()?; let (token, server) = self.token_with_server()?;
spawn(async move { spawn(async move {
match server.update_workspace(&token, params).await { match server.update_workspace(&token, params).await {
@ -234,8 +231,8 @@ impl WorkspaceController {
Ok(()) Ok(())
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn delete_workspace_on_server(&self, workspace_id: &str) -> Result<(), WorkspaceError> { fn delete_workspace_on_server(&self, workspace_id: &str) -> Result<(), WorkspaceError> {
let params = DeleteWorkspaceParams { let params = DeleteWorkspaceParams {
workspace_id: workspace_id.to_string(), workspace_id: workspace_id.to_string(),
}; };
@ -252,15 +249,15 @@ impl WorkspaceController {
Ok(()) Ok(())
} }
#[tracing::instrument(skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
async fn read_workspaces_on_server(&self, user_id: String, params: QueryWorkspaceParams) -> Result<(), WorkspaceError> { fn read_workspaces_on_server(&self, user_id: String, params: QueryWorkspaceParams) -> Result<(), WorkspaceError> {
let (token, server) = self.token_with_server()?; let (token, server) = self.token_with_server()?;
let workspace_sql = self.workspace_sql.clone(); let workspace_sql = self.workspace_sql.clone();
let app_sql = self.app_sql.clone(); let app_sql = self.app_sql.clone();
let view_sql = self.view_sql.clone(); let view_sql = self.view_sql.clone();
let conn = self.database.db_connection()?; let conn = self.database.db_connection()?;
spawn(async move { spawn(async move {
// Opti: retry? // Opti: handle the error and retry?
let workspaces = server.read_workspace(&token, params).await?; let workspaces = server.read_workspace(&token, params).await?;
let _ = (&*conn).immediate_transaction::<_, WorkspaceError, _>(|| { let _ = (&*conn).immediate_transaction::<_, WorkspaceError, _>(|| {
log::debug!("Save {} workspace", workspaces.len()); log::debug!("Save {} workspace", workspaces.len());