feat(kmp): add kmp search use rust

This commit is contained in:
ZhuJHua
2024-11-26 10:47:27 +08:00
parent d0be93dd64
commit 95886edb3b
10 changed files with 851 additions and 30 deletions

View File

@@ -3,10 +3,9 @@
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import '../frb_generated.dart';
import 'constants.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These functions are ignored because they are not marked as `pub`: `calculate_target_dimensions`, `load_image`
@@ -24,8 +23,11 @@ abstract class DynamicImage implements RustOpaqueInterface {}
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<ImageCompress>>
abstract class ImageCompress implements RustOpaqueInterface {
static Future<Uint8List> contain(
{required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) =>
static Future<Uint8List> contain({required String filePath,
CompressFormat? compressFormat,
int? maxWidth,
int? maxHeight,
int? quality}) =>
RustLib.instance.api.crateApiCompressImageCompressContain(
filePath: filePath,
compressFormat: compressFormat,

View File

@@ -3,9 +3,8 @@
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `assert_receiver_is_total_eq`, `eq`

19
lib/src/rust/api/kmp.dart Normal file
View File

@@ -0,0 +1,19 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.6.0.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
Future<Uint64List> buildPrefixTable({required String pattern}) =>
RustLib.instance.api.crateApiKmpBuildPrefixTable(pattern: pattern);
Future<Uint64List> kmpSearch({required String text, required String pattern}) =>
RustLib.instance.api.crateApiKmpKmpSearch(text: text, pattern: pattern);
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>
abstract class Kmp implements RustOpaqueInterface {
static Future<String> replaceWithKmp({required String text, required Map<String, String> replacements}) =>
RustLib.instance.api.crateApiKmpKmpReplaceWithKmp(text: text, replacements: replacements);
}

View File

@@ -3,15 +3,14 @@
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'dart:async';
import 'dart:convert';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'api/compress.dart';
import 'api/constants.dart';
import 'api/kmp.dart';
import 'dart:async';
import 'dart:convert';
import 'frb_generated.dart';
import 'frb_generated.io.dart' if (dart.library.js_interop) 'frb_generated.web.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
/// Main entrypoint of the Rust API
class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
@@ -65,7 +64,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
String get codegenVersion => '2.6.0';
@override
int get rustContentHash => 1782633232;
int get rustContentHash => -914742464;
static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig(
stem: 'rust_lib_mood_diary',
@@ -75,8 +74,15 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
}
abstract class RustLibApi extends BaseApi {
Future<Uint8List> crateApiCompressImageCompressContain(
{required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality});
Future<Uint8List> crateApiCompressImageCompressContain({required String filePath,
CompressFormat? compressFormat,
int? maxWidth,
int? maxHeight,
int? quality});
Future<String> crateApiKmpKmpReplaceWithKmp({required String text, required Map<String, String> replacements});
Future<Uint64List> crateApiKmpBuildPrefixTable({required String pattern});
Future<Uint8List> crateApiCompressCompress(
{required DynamicImage img,
@@ -85,6 +91,8 @@ abstract class RustLibApi extends BaseApi {
required CompressFormat compressFormat,
required int quality});
Future<Uint64List> crateApiKmpKmpSearch({required String text, required String pattern});
RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_DynamicImage;
RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_DynamicImage;
@@ -96,6 +104,12 @@ abstract class RustLibApi extends BaseApi {
RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_ImageCompress;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ImageCompressPtr;
RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Kmp;
RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Kmp;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr;
}
class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@@ -107,8 +121,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
});
@override
Future<Uint8List> crateApiCompressImageCompressContain(
{required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) {
Future<Uint8List> crateApiCompressImageCompressContain({required String filePath,
CompressFormat? compressFormat,
int? maxWidth,
int? maxHeight,
int? quality}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
@@ -134,6 +151,53 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
argNames: ["filePath", "compressFormat", "maxWidth", "maxHeight", "quality"],
);
@override
Future<String> crateApiKmpKmpReplaceWithKmp({required String text, required Map<String, String> replacements}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(text, serializer);
sse_encode_Map_String_String(replacements, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
decodeErrorData: null,
),
constMeta: kCrateApiKmpKmpReplaceWithKmpConstMeta,
argValues: [text, replacements],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiKmpKmpReplaceWithKmpConstMeta => const TaskConstMeta(
debugName: "Kmp_replace_with_kmp",
argNames: ["text", "replacements"],
);
@override
Future<Uint64List> crateApiKmpBuildPrefixTable({required String pattern}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(pattern, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 3, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_prim_usize_strict,
decodeErrorData: null,
),
constMeta: kCrateApiKmpBuildPrefixTableConstMeta,
argValues: [pattern],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiKmpBuildPrefixTableConstMeta => const TaskConstMeta(
debugName: "build_prefix_table",
argNames: ["pattern"],
);
@override
Future<Uint8List> crateApiCompressCompress(
{required DynamicImage img,
@@ -149,7 +213,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_u_32(dstWidth, serializer);
sse_encode_compress_format(compressFormat, serializer);
sse_encode_u_8(quality, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2, port: port_);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_prim_u_8_strict,
@@ -166,6 +230,30 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
argNames: ["img", "dstHeight", "dstWidth", "compressFormat", "quality"],
);
@override
Future<Uint64List> crateApiKmpKmpSearch({required String text, required String pattern}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(text, serializer);
sse_encode_String(pattern, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_prim_usize_strict,
decodeErrorData: null,
),
constMeta: kCrateApiKmpKmpSearchConstMeta,
argValues: [text, pattern],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiKmpKmpSearchConstMeta => const TaskConstMeta(
debugName: "kmp_search",
argNames: ["text", "pattern"],
);
RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_DynamicImage =>
wire.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage;
@@ -178,6 +266,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_ImageCompress =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress;
RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Kmp =>
wire.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp;
RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Kmp =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp;
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -191,6 +285,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ImageCompressImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@protected
Kmp dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return KmpImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@protected
DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
dynamic raw) {
@@ -198,6 +298,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return DynamicImageImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@protected
Map<String, String> dco_decode_Map_String_String(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return Map.fromEntries(dco_decode_list_record_string_string(raw).map((e) => MapEntry(e.$1, e.$2)));
}
@protected
DynamicImage dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -210,6 +316,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ImageCompressImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@protected
Kmp dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return KmpImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@protected
String dco_decode_String(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -252,6 +364,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw as Uint8List;
}
@protected
Uint64List dco_decode_list_prim_usize_strict(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return raw as Uint64List;
}
@protected
List<(String, String)> dco_decode_list_record_string_string(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return (raw as List<dynamic>).map(dco_decode_record_string_string).toList();
}
@protected
CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -270,6 +394,19 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw == null ? null : dco_decode_box_autoadd_u_8(raw);
}
@protected
(String, String) dco_decode_record_string_string(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
final arr = raw as List<dynamic>;
if (arr.length != 2) {
throw Exception('Expected 2 elements, got ${arr.length}');
}
return (
dco_decode_String(arr[0]),
dco_decode_String(arr[1]),
);
}
@protected
int dco_decode_u_32(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -282,6 +419,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw as int;
}
@protected
void dco_decode_unit(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return;
}
@protected
BigInt dco_decode_usize(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -302,6 +445,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ImageCompressImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
Kmp sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return KmpImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer) {
@@ -309,6 +459,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return DynamicImageImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
Map<String, String> sse_decode_Map_String_String(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_list_record_string_string(deserializer);
return Map.fromEntries(inner.map((e) => MapEntry(e.$1, e.$2)));
}
@protected
DynamicImage sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer) {
@@ -323,6 +480,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ImageCompressImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
Kmp sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return KmpImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
String sse_decode_String(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -368,6 +531,25 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return deserializer.buffer.getUint8List(len_);
}
@protected
Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var len_ = sse_decode_i_32(deserializer);
return deserializer.buffer.getUint64List(len_);
}
@protected
List<(String, String)> sse_decode_list_record_string_string(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var len_ = sse_decode_i_32(deserializer);
var ans_ = <(String, String)>[];
for (var idx_ = 0; idx_ < len_; ++idx_) {
ans_.add(sse_decode_record_string_string(deserializer));
}
return ans_;
}
@protected
CompressFormat? sse_decode_opt_box_autoadd_compress_format(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -401,6 +583,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
(String, String) sse_decode_record_string_string(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var var_field0 = sse_decode_String(deserializer);
var var_field1 = sse_decode_String(deserializer);
return (var_field0, var_field1);
}
@protected
int sse_decode_u_32(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -413,6 +603,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return deserializer.buffer.getUint8();
}
@protected
void sse_decode_unit(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
}
@protected
BigInt sse_decode_usize(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -438,6 +633,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_usize((self as ImageCompressImpl).frbInternalSseEncode(move: true), serializer);
}
@protected
void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
Kmp self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_usize((self as KmpImpl).frbInternalSseEncode(move: true), serializer);
}
@protected
void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self, SseSerializer serializer) {
@@ -445,6 +647,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_usize((self as DynamicImageImpl).frbInternalSseEncode(move: false), serializer);
}
@protected
void sse_encode_Map_String_String(Map<String, String> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_list_record_string_string(self.entries.map((e) => (e.key, e.value)).toList(), serializer);
}
@protected
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self, SseSerializer serializer) {
@@ -459,6 +667,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_usize((self as ImageCompressImpl).frbInternalSseEncode(move: null), serializer);
}
@protected
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
Kmp self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_usize((self as KmpImpl).frbInternalSseEncode(move: null), serializer);
}
@protected
void sse_encode_String(String self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -502,6 +717,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
serializer.buffer.putUint8List(self);
}
@protected
void sse_encode_list_prim_usize_strict(Uint64List self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
serializer.buffer.putUint64List(self);
}
@protected
void sse_encode_list_record_string_string(List<(String, String)> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
for (final item in self) {
sse_encode_record_string_string(item, serializer);
}
}
@protected
void sse_encode_opt_box_autoadd_compress_format(CompressFormat? self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -532,6 +763,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
void sse_encode_record_string_string((String, String) self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_String(self.$1, serializer);
sse_encode_String(self.$2, serializer);
}
@protected
void sse_encode_u_32(int self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -544,6 +782,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
serializer.buffer.putUint8(self);
}
@protected
void sse_encode_unit(void self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
}
@protected
void sse_encode_usize(BigInt self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -588,3 +831,19 @@ class ImageCompressImpl extends RustOpaque implements ImageCompress {
rustArcDecrementStrongCountPtr: RustLib.instance.api.rust_arc_decrement_strong_count_ImageCompressPtr,
);
}
@sealed
class KmpImpl extends RustOpaque implements Kmp {
// Not to be used by end users
KmpImpl.frbInternalDcoDecode(List<dynamic> wire) : super.frbInternalDcoDecode(wire, _kStaticData);
// Not to be used by end users
KmpImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative)
: super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData);
static final _kStaticData = RustArcStaticData(
rustArcIncrementStrongCount: RustLib.instance.api.rust_arc_increment_strong_count_Kmp,
rustArcDecrementStrongCount: RustLib.instance.api.rust_arc_decrement_strong_count_Kmp,
rustArcDecrementStrongCountPtr: RustLib.instance.api.rust_arc_decrement_strong_count_KmpPtr,
);
}

View File

@@ -3,15 +3,14 @@
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'api/compress.dart';
import 'api/constants.dart';
import 'api/kmp.dart';
import 'dart:async';
import 'dart:convert';
import 'dart:ffi' as ffi;
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart';
import 'api/compress.dart';
import 'api/constants.dart';
import 'frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart';
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
RustLibApiImplPlatform({
@@ -27,6 +26,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ImageCompressPtr => wire
._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompressPtr;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr;
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw);
@@ -34,16 +36,25 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
ImageCompress dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
dynamic raw);
@protected
Kmp dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw);
@protected
DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
dynamic raw);
@protected
Map<String, String> dco_decode_Map_String_String(dynamic raw);
@protected
DynamicImage dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(dynamic raw);
@protected
ImageCompress dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(dynamic raw);
@protected
Kmp dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw);
@protected
String dco_decode_String(dynamic raw);
@@ -65,6 +76,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
Uint64List dco_decode_list_prim_usize_strict(dynamic raw);
@protected
List<(String, String)> dco_decode_list_record_string_string(dynamic raw);
@protected
CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw);
@@ -74,12 +91,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
int? dco_decode_opt_box_autoadd_u_8(dynamic raw);
@protected
(String, String) dco_decode_record_string_string(dynamic raw);
@protected
int dco_decode_u_32(dynamic raw);
@protected
int dco_decode_u_8(dynamic raw);
@protected
void dco_decode_unit(dynamic raw);
@protected
BigInt dco_decode_usize(dynamic raw);
@@ -90,10 +113,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
ImageCompress sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
SseDeserializer deserializer);
@protected
Kmp sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
SseDeserializer deserializer);
@protected
DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer);
@protected
Map<String, String> sse_decode_Map_String_String(SseDeserializer deserializer);
@protected
DynamicImage sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer);
@@ -102,6 +132,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
ImageCompress sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
SseDeserializer deserializer);
@protected
Kmp sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(SseDeserializer deserializer);
@protected
String sse_decode_String(SseDeserializer deserializer);
@@ -123,6 +156,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer);
@protected
List<(String, String)> sse_decode_list_record_string_string(SseDeserializer deserializer);
@protected
CompressFormat? sse_decode_opt_box_autoadd_compress_format(SseDeserializer deserializer);
@@ -132,12 +171,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
int? sse_decode_opt_box_autoadd_u_8(SseDeserializer deserializer);
@protected
(String, String) sse_decode_record_string_string(SseDeserializer deserializer);
@protected
int sse_decode_u_32(SseDeserializer deserializer);
@protected
int sse_decode_u_8(SseDeserializer deserializer);
@protected
void sse_decode_unit(SseDeserializer deserializer);
@protected
BigInt sse_decode_usize(SseDeserializer deserializer);
@@ -151,10 +196,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
ImageCompress self, SseSerializer serializer);
@protected
void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
Kmp self, SseSerializer serializer);
@protected
void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self, SseSerializer serializer);
@protected
void sse_encode_Map_String_String(Map<String, String> self, SseSerializer serializer);
@protected
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self, SseSerializer serializer);
@@ -163,6 +215,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
ImageCompress self, SseSerializer serializer);
@protected
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(Kmp self, SseSerializer serializer);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@@ -184,6 +239,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer);
@protected
void sse_encode_list_prim_usize_strict(Uint64List self, SseSerializer serializer);
@protected
void sse_encode_list_record_string_string(List<(String, String)> self, SseSerializer serializer);
@protected
void sse_encode_opt_box_autoadd_compress_format(CompressFormat? self, SseSerializer serializer);
@@ -193,12 +254,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_opt_box_autoadd_u_8(int? self, SseSerializer serializer);
@protected
void sse_encode_record_string_string((String, String) self, SseSerializer serializer);
@protected
void sse_encode_u_32(int self, SseSerializer serializer);
@protected
void sse_encode_u_8(int self, SseSerializer serializer);
@protected
void sse_encode_unit(void self, SseSerializer serializer);
@protected
void sse_encode_usize(BigInt self, SseSerializer serializer);
@@ -276,4 +343,34 @@ class RustLibWire implements BaseWire {
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompressPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_mood_diary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp');
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_mood_diary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp');
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
}

View File

@@ -6,14 +6,13 @@
// Static analysis wrongly picks the IO variant, thus ignore this
// ignore_for_file: argument_type_not_assignable
import 'dart:async';
import 'dart:convert';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart';
import 'api/compress.dart';
import 'api/constants.dart';
import 'api/kmp.dart';
import 'dart:async';
import 'dart:convert';
import 'frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart';
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
RustLibApiImplPlatform({
@@ -29,6 +28,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ImageCompressPtr =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp;
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw);
@@ -36,16 +38,25 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
ImageCompress dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
dynamic raw);
@protected
Kmp dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw);
@protected
DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
dynamic raw);
@protected
Map<String, String> dco_decode_Map_String_String(dynamic raw);
@protected
DynamicImage dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(dynamic raw);
@protected
ImageCompress dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(dynamic raw);
@protected
Kmp dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw);
@protected
String dco_decode_String(dynamic raw);
@@ -67,6 +78,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
Uint64List dco_decode_list_prim_usize_strict(dynamic raw);
@protected
List<(String, String)> dco_decode_list_record_string_string(dynamic raw);
@protected
CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw);
@@ -76,12 +93,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
int? dco_decode_opt_box_autoadd_u_8(dynamic raw);
@protected
(String, String) dco_decode_record_string_string(dynamic raw);
@protected
int dco_decode_u_32(dynamic raw);
@protected
int dco_decode_u_8(dynamic raw);
@protected
void dco_decode_unit(dynamic raw);
@protected
BigInt dco_decode_usize(dynamic raw);
@@ -92,10 +115,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
ImageCompress sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
SseDeserializer deserializer);
@protected
Kmp sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
SseDeserializer deserializer);
@protected
DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer);
@protected
Map<String, String> sse_decode_Map_String_String(SseDeserializer deserializer);
@protected
DynamicImage sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer);
@@ -104,6 +134,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
ImageCompress sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
SseDeserializer deserializer);
@protected
Kmp sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(SseDeserializer deserializer);
@protected
String sse_decode_String(SseDeserializer deserializer);
@@ -125,6 +158,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer);
@protected
List<(String, String)> sse_decode_list_record_string_string(SseDeserializer deserializer);
@protected
CompressFormat? sse_decode_opt_box_autoadd_compress_format(SseDeserializer deserializer);
@@ -134,12 +173,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
int? sse_decode_opt_box_autoadd_u_8(SseDeserializer deserializer);
@protected
(String, String) sse_decode_record_string_string(SseDeserializer deserializer);
@protected
int sse_decode_u_32(SseDeserializer deserializer);
@protected
int sse_decode_u_8(SseDeserializer deserializer);
@protected
void sse_decode_unit(SseDeserializer deserializer);
@protected
BigInt sse_decode_usize(SseDeserializer deserializer);
@@ -153,10 +198,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
ImageCompress self, SseSerializer serializer);
@protected
void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
Kmp self, SseSerializer serializer);
@protected
void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self, SseSerializer serializer);
@protected
void sse_encode_Map_String_String(Map<String, String> self, SseSerializer serializer);
@protected
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self, SseSerializer serializer);
@@ -165,6 +217,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
ImageCompress self, SseSerializer serializer);
@protected
void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(Kmp self, SseSerializer serializer);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@@ -186,6 +241,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer);
@protected
void sse_encode_list_prim_usize_strict(Uint64List self, SseSerializer serializer);
@protected
void sse_encode_list_record_string_string(List<(String, String)> self, SseSerializer serializer);
@protected
void sse_encode_opt_box_autoadd_compress_format(CompressFormat? self, SseSerializer serializer);
@@ -195,12 +256,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_opt_box_autoadd_u_8(int? self, SseSerializer serializer);
@protected
void sse_encode_record_string_string((String, String) self, SseSerializer serializer);
@protected
void sse_encode_u_32(int self, SseSerializer serializer);
@protected
void sse_encode_u_8(int self, SseSerializer serializer);
@protected
void sse_encode_unit(void self, SseSerializer serializer);
@protected
void sse_encode_usize(BigInt self, SseSerializer serializer);
@@ -236,6 +303,12 @@ class RustLibWire implements BaseWire {
wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
ptr);
void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(int ptr) =>
wasmModule.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(ptr);
void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(int ptr) =>
wasmModule.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(ptr);
}
@JS('wasm_bindgen')
@@ -259,4 +332,10 @@ extension type RustLibWasmModule._(JSObject _) implements JSObject {
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
int ptr);
external void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
int ptr);
external void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
int ptr);
}

View File

@@ -3,6 +3,7 @@ use std::io::BufWriter;
use anyhow::Result;
use fast_image_resize::images::Image;
use fast_image_resize::{IntoImageView, Resizer};
use flutter_rust_bridge::frb;
use image::{
codecs::{

84
rust/src/api/kmp.rs Normal file
View File

@@ -0,0 +1,84 @@
use flutter_rust_bridge::frb;
use std::collections::HashMap;
pub fn build_prefix_table(pattern: &str) -> Vec<usize> {
let m = pattern.len();
let mut prefix_table = vec![0; m];
let mut j = 0;
for i in 1..m {
while j > 0 && pattern.chars().nth(i) != pattern.chars().nth(j) {
j = prefix_table[j - 1];
}
if pattern.chars().nth(i) == pattern.chars().nth(j) {
j += 1;
}
prefix_table[i] = j;
}
prefix_table
}
pub fn kmp_search(text: &str, pattern: &str) -> Vec<usize> {
let m = pattern.len();
let prefix_table = build_prefix_table(pattern);
let mut matches = Vec::new();
let mut j = 0;
for (i, c) in text.chars().enumerate() {
while j > 0 && Some(c) != pattern.chars().nth(j) {
j = prefix_table[j - 1];
}
if Some(c) == pattern.chars().nth(j) {
j += 1;
}
if j == m {
matches.push(i + 1 - m); // 添加匹配的起始索引
j = prefix_table[j - 1];
}
}
matches
}
#[frb(opaque)]
pub struct Kmp;
impl Kmp {
pub fn replace_with_kmp(text: String, replacements: HashMap<String, String>) -> String {
if replacements.is_empty() {
return text;
}
let mut match_entries: HashMap<usize, (&str, &str)> = HashMap::new();
for (pattern, replacement) in &replacements {
let matches = kmp_search(&text, pattern);
for &index in &matches {
if !match_entries.contains_key(&index)
|| match_entries[&index].0.len() < pattern.len()
{
// 确保在相同索引位置,优先使用较长的模式
match_entries.insert(index, (pattern, replacement));
}
}
}
let mut result = String::new();
let mut last_index = 0;
let mut match_entries: Vec<_> = match_entries.into_iter().collect();
match_entries.sort_by_key(|&(index, _)| index);
for (index, (pattern, replacement)) in match_entries {
if index >= last_index {
result.push_str(&text[last_index..index]);
result.push_str(replacement);
last_index = index + pattern.len();
}
}
result.push_str(&text[last_index..]);
result
}
}

View File

@@ -1,2 +1,3 @@
pub mod compress;
pub mod constants;
pub mod constants;
pub mod kmp;

View File

@@ -26,6 +26,7 @@
// Section: imports
use crate::api::compress::*;
use crate::api::kmp::*;
use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable};
use flutter_rust_bridge::{Handler, IntoIntoDart};
@@ -38,7 +39,7 @@ flutter_rust_bridge::frb_generated_boilerplate!(
default_rust_auto_opaque = RustAutoOpaqueMoi,
);
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.6.0";
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 1782633232;
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -914742464;
// Section: executor
@@ -92,6 +93,78 @@ fn wire__crate__api__compress__ImageCompress_contain_impl(
},
)
}
fn wire__crate__api__kmp__Kmp_replace_with_kmp_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
data_len_: i32,
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "Kmp_replace_with_kmp",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
move || {
let message = unsafe {
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
ptr_,
rust_vec_len_,
data_len_,
)
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_text = <String>::sse_decode(&mut deserializer);
let api_replacements =
<std::collections::HashMap<String, String>>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok(crate::api::kmp::Kmp::replace_with_kmp(
api_text,
api_replacements,
))?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__kmp__build_prefix_table_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
data_len_: i32,
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "build_prefix_table",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
move || {
let message = unsafe {
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
ptr_,
rust_vec_len_,
data_len_,
)
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_pattern = <String>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok =
Result::<_, ()>::Ok(crate::api::kmp::build_prefix_table(&api_pattern))?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__compress__compress_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
@@ -154,6 +227,41 @@ fn wire__crate__api__compress__compress_impl(
},
)
}
fn wire__crate__api__kmp__kmp_search_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
data_len_: i32,
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "kmp_search",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
move || {
let message = unsafe {
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
ptr_,
rust_vec_len_,
data_len_,
)
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_text = <String>::sse_decode(&mut deserializer);
let api_pattern = <String>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok =
Result::<_, ()>::Ok(crate::api::kmp::kmp_search(&api_text, &api_pattern))?;
Ok(output_ok)
})())
}
},
)
}
// Section: related_funcs
@@ -163,6 +271,9 @@ flutter_rust_bridge::frb_generated_moi_arc_impl_value!(
flutter_rust_bridge::frb_generated_moi_arc_impl_value!(
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<ImageCompress>
);
flutter_rust_bridge::frb_generated_moi_arc_impl_value!(
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>
);
// Section: dart2rust
@@ -184,6 +295,22 @@ impl SseDecode for ImageCompress {
}
}
impl SseDecode for Kmp {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut inner = <RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>>::sse_decode(deserializer);
return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner);
}
}
impl SseDecode for std::collections::HashMap<String, String> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut inner = <Vec<(String, String)>>::sse_decode(deserializer);
return inner.into_iter().collect();
}
}
impl SseDecode
for RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<DynamicImage>>
{
@@ -204,6 +331,14 @@ impl SseDecode
}
}
impl SseDecode for RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut inner = <usize>::sse_decode(deserializer);
return decode_rust_opaque_moi(inner);
}
}
impl SseDecode for String {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -244,6 +379,30 @@ impl SseDecode for Vec<u8> {
}
}
impl SseDecode for Vec<usize> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut len_ = <i32>::sse_decode(deserializer);
let mut ans_ = vec![];
for idx_ in 0..len_ {
ans_.push(<usize>::sse_decode(deserializer));
}
return ans_;
}
}
impl SseDecode for Vec<(String, String)> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut len_ = <i32>::sse_decode(deserializer);
let mut ans_ = vec![];
for idx_ in 0..len_ {
ans_.push(<(String, String)>::sse_decode(deserializer));
}
return ans_;
}
}
impl SseDecode for Option<crate::api::constants::CompressFormat> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -279,6 +438,15 @@ impl SseDecode for Option<u8> {
}
}
impl SseDecode for (String, String) {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut var_field0 = <String>::sse_decode(deserializer);
let mut var_field1 = <String>::sse_decode(deserializer);
return (var_field0, var_field1);
}
}
impl SseDecode for u32 {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -293,6 +461,11 @@ impl SseDecode for u8 {
}
}
impl SseDecode for () {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {}
}
impl SseDecode for usize {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -322,7 +495,10 @@ fn pde_ffi_dispatcher_primary_impl(
rust_vec_len,
data_len,
),
2 => wire__crate__api__compress__compress_impl(port, ptr, rust_vec_len, data_len),
2 => wire__crate__api__kmp__Kmp_replace_with_kmp_impl(port, ptr, rust_vec_len, data_len),
3 => wire__crate__api__kmp__build_prefix_table_impl(port, ptr, rust_vec_len, data_len),
4 => wire__crate__api__compress__compress_impl(port, ptr, rust_vec_len, data_len),
5 => wire__crate__api__kmp__kmp_search_impl(port, ptr, rust_vec_len, data_len),
_ => unreachable!(),
}
}
@@ -356,6 +532,21 @@ impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<ImageCompress>> for ImageCompr
}
}
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for FrbWrapper<Kmp> {
fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0)
.into_dart()
}
}
impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper<Kmp> {}
impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<Kmp>> for Kmp {
fn into_into_dart(self) -> FrbWrapper<Kmp> {
self.into()
}
}
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for crate::api::constants::CompressFormat {
fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
@@ -393,6 +584,23 @@ impl SseEncode for ImageCompress {
}
}
impl SseEncode for Kmp {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>>::sse_encode(
flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self),
serializer,
);
}
}
impl SseEncode for std::collections::HashMap<String, String> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<Vec<(String, String)>>::sse_encode(self.into_iter().collect(), serializer);
}
}
impl SseEncode
for RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<DynamicImage>>
{
@@ -415,6 +623,15 @@ impl SseEncode
}
}
impl SseEncode for RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
let (ptr, size) = self.sse_encode_raw();
<usize>::sse_encode(ptr, serializer);
<i32>::sse_encode(size, serializer);
}
}
impl SseEncode for String {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -456,6 +673,26 @@ impl SseEncode for Vec<u8> {
}
}
impl SseEncode for Vec<usize> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<i32>::sse_encode(self.len() as _, serializer);
for item in self {
<usize>::sse_encode(item, serializer);
}
}
}
impl SseEncode for Vec<(String, String)> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<i32>::sse_encode(self.len() as _, serializer);
for item in self {
<(String, String)>::sse_encode(item, serializer);
}
}
}
impl SseEncode for Option<crate::api::constants::CompressFormat> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -486,6 +723,14 @@ impl SseEncode for Option<u8> {
}
}
impl SseEncode for (String, String) {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<String>::sse_encode(self.0, serializer);
<String>::sse_encode(self.1, serializer);
}
}
impl SseEncode for u32 {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -500,6 +745,11 @@ impl SseEncode for u8 {
}
}
impl SseEncode for () {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {}
}
impl SseEncode for usize {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -526,6 +776,7 @@ mod io {
use super::*;
use crate::api::compress::*;
use crate::api::kmp::*;
use flutter_rust_bridge::for_generated::byteorder::{
NativeEndian, ReadBytesExt, WriteBytesExt,
};
@@ -563,6 +814,20 @@ mod io {
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<ImageCompress>>::decrement_strong_count(ptr as _);
}
#[no_mangle]
pub extern "C" fn frbgen_mood_diary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>::increment_strong_count(ptr as _);
}
#[no_mangle]
pub extern "C" fn frbgen_mood_diary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>::decrement_strong_count(ptr as _);
}
}
use image::DynamicImage;
#[cfg(not(target_family = "wasm"))]
@@ -578,6 +843,7 @@ mod web {
use super::*;
use crate::api::compress::*;
use crate::api::kmp::*;
use flutter_rust_bridge::for_generated::byteorder::{
NativeEndian, ReadBytesExt, WriteBytesExt,
};
@@ -617,6 +883,20 @@ mod web {
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<ImageCompress>>::decrement_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>::increment_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Kmp>>::decrement_strong_count(ptr as _);
}
}
#[cfg(target_family = "wasm")]
pub use web::*;