diff --git a/lib/src/rust/api/compress.dart b/lib/src/rust/api/compress.dart index 789f1a4..d2a8e86 100644 --- a/lib/src/rust/api/compress.dart +++ b/lib/src/rust/api/compress.dart @@ -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> abstract class ImageCompress implements RustOpaqueInterface { - static Future contain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) => + static Future contain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}) => RustLib.instance.api.crateApiCompressImageCompressContain( filePath: filePath, compressFormat: compressFormat, diff --git a/lib/src/rust/api/constants.dart b/lib/src/rust/api/constants.dart index 8082d4c..f9134e4 100644 --- a/lib/src/rust/api/constants.dart +++ b/lib/src/rust/api/constants.dart @@ -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` diff --git a/lib/src/rust/api/kmp.dart b/lib/src/rust/api/kmp.dart new file mode 100644 index 0000000..37f1b38 --- /dev/null +++ b/lib/src/rust/api/kmp.dart @@ -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 buildPrefixTable({required String pattern}) => + RustLib.instance.api.crateApiKmpBuildPrefixTable(pattern: pattern); + +Future kmpSearch({required String text, required String pattern}) => + RustLib.instance.api.crateApiKmpKmpSearch(text: text, pattern: pattern); + +// Rust type: RustOpaqueMoi> +abstract class Kmp implements RustOpaqueInterface { + static Future replaceWithKmp({required String text, required Map replacements}) => + RustLib.instance.api.crateApiKmpKmpReplaceWithKmp(text: text, replacements: replacements); +} diff --git a/lib/src/rust/frb_generated.dart b/lib/src/rust/frb_generated.dart index 087667b..82afd5d 100644 --- a/lib/src/rust/frb_generated.dart +++ b/lib/src/rust/frb_generated.dart @@ -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 { @@ -65,7 +64,7 @@ class RustLib extends BaseEntrypoint { 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 { } abstract class RustLibApi extends BaseApi { - Future crateApiCompressImageCompressContain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}); + Future crateApiCompressImageCompressContain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}); + + Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}); + + Future crateApiKmpBuildPrefixTable({required String pattern}); Future crateApiCompressCompress( {required DynamicImage img, @@ -85,6 +91,8 @@ abstract class RustLibApi extends BaseApi { required CompressFormat compressFormat, required int quality}); + Future 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 crateApiCompressImageCompressContain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) { + Future 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 crateApiKmpKmpReplaceWithKmp({required String text, required Map 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 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 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 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); } + @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); + } + @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); } + @protected + Map 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); } + @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); + } + @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).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; + 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 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 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 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, + ); +} diff --git a/lib/src/rust/frb_generated.io.dart b/lib/src/rust/frb_generated.io.dart index 649d2f6..93bdca2 100644 --- a/lib/src/rust/frb_generated.io.dart +++ b/lib/src/rust/frb_generated.io.dart @@ -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 { RustLibApiImplPlatform({ @@ -27,6 +26,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { 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 { 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 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 { @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 { @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 { 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 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 { 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 { @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 { @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 { 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 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 { 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 { @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 { @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 rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ffi.Pointer 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)>>( + '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 rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ffi.Pointer 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)>>( + '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)>(); } diff --git a/lib/src/rust/frb_generated.web.dart b/lib/src/rust/frb_generated.web.dart index 2cfda93..6c6fe47 100644 --- a/lib/src/rust/frb_generated.web.dart +++ b/lib/src/rust/frb_generated.web.dart @@ -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 { RustLibApiImplPlatform({ @@ -29,6 +28,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { 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 { 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 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 { @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 { @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 { 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 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 { 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 { @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 { @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 { 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 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 { 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 { @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 { @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); } diff --git a/rust/src/api/compress.rs b/rust/src/api/compress.rs index 54794a5..8acc5ae 100644 --- a/rust/src/api/compress.rs +++ b/rust/src/api/compress.rs @@ -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::{ diff --git a/rust/src/api/kmp.rs b/rust/src/api/kmp.rs new file mode 100644 index 0000000..a66d9a0 --- /dev/null +++ b/rust/src/api/kmp.rs @@ -0,0 +1,84 @@ +use flutter_rust_bridge::frb; +use std::collections::HashMap; + +pub fn build_prefix_table(pattern: &str) -> Vec { + 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 { + 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 { + if replacements.is_empty() { + return text; + } + + let mut match_entries: HashMap = 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 + } +} diff --git a/rust/src/api/mod.rs b/rust/src/api/mod.rs index 93b4567..883b255 100644 --- a/rust/src/api/mod.rs +++ b/rust/src/api/mod.rs @@ -1,2 +1,3 @@ pub mod compress; -pub mod constants; \ No newline at end of file +pub mod constants; +pub mod kmp; \ No newline at end of file diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index e16dfb4..a5d87c0 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -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::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 = ::sse_decode(&mut deserializer); + let api_replacements = + >::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::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 = ::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::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 = ::sse_decode(&mut deserializer); + let api_pattern = ::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 ); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner +); // 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 = >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + +impl SseDecode for std::collections::HashMap { + // 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 = >::sse_decode(deserializer); + return inner.into_iter().collect(); + } +} + impl SseDecode for RustOpaqueMoi> { @@ -204,6 +331,14 @@ impl SseDecode } } +impl SseDecode for RustOpaqueMoi> { + // 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 = ::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 { } } +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::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_ = ::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 { // 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 { } } +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 = ::sse_decode(deserializer); + let mut var_field1 = ::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> for ImageCompr } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + 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 {} + +impl flutter_rust_bridge::IntoIntoDart> for Kmp { + fn into_into_dart(self) -> FrbWrapper { + 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) { + >>::sse_encode( + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), + serializer, + ); + } +} + +impl SseEncode for std::collections::HashMap { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.into_iter().collect(), serializer); + } +} + impl SseEncode for RustOpaqueMoi> { @@ -415,6 +623,15 @@ impl SseEncode } } +impl SseEncode for RustOpaqueMoi> { + // 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(); + ::sse_encode(ptr, serializer); + ::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 { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::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) { + ::sse_encode(self.len() as _, serializer); + for item in self { + <(String, String)>::sse_encode(item, serializer); + } + } +} + impl SseEncode for Option { // 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 { } } +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) { + ::sse_encode(self.0, serializer); + ::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::>::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::>::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::>::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::>::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::>::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::>::decrement_strong_count(ptr as _); + } } #[cfg(target_family = "wasm")] pub use web::*;