Make vector db stateful in rust

This commit is contained in:
laurenspriem
2025-04-08 14:48:30 +05:30
parent 120dbeb4fc
commit 6500748c5a
7 changed files with 1955 additions and 558 deletions

View File

@@ -6,56 +6,41 @@
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'package:photos/src/rust/frb_generated.dart';
// These functions are ignored because they are not marked as `pub`: `create_index`, `ensure_capacity`, `get_index`, `load_index`, `save_index`
// These functions are ignored because they are not marked as `pub`: `ensure_capacity`, `save_index`
Future<(BigInt, BigInt, BigInt, BigInt, BigInt)> getIndexStats({
required String indexPath,
}) =>
RustLib.instance.api.crateApiUsearchApiGetIndexStats(indexPath: indexPath);
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box < dyn Error >>>
abstract class BoxError implements RustOpaqueInterface {}
Future<void> addVector({
required String indexPath,
required BigInt key,
required List<double> vector,
}) =>
RustLib.instance.api.crateApiUsearchApiAddVector(
indexPath: indexPath,
key: key,
vector: vector,
);
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>>
abstract class Matches implements RustOpaqueInterface {}
Future<void> bulkAddVectors({
required String indexPath,
required Uint64List keys,
required List<Float32List> vectors,
}) =>
RustLib.instance.api.crateApiUsearchApiBulkAddVectors(
indexPath: indexPath,
keys: keys,
vectors: vectors,
);
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>
abstract class VectorDb implements RustOpaqueInterface {
Future<void> addVector({required BigInt key, required List<double> vector});
Future<(Uint64List, Float32List)> searchVectors({
required String indexPath,
required List<double> query,
required BigInt count,
}) =>
RustLib.instance.api.crateApiUsearchApiSearchVectors(
indexPath: indexPath,
query: query,
count: count,
);
Future<void> bulkAddVectors({
required Uint64List keys,
required List<Float32List> vectors,
});
Future<Float32List> getVector({
required String indexPath,
required BigInt key,
}) =>
RustLib.instance.api
.crateApiUsearchApiGetVector(indexPath: indexPath, key: key);
Future<void> deleteIndex();
Future<BigInt> removeVector({required String indexPath, required BigInt key}) =>
RustLib.instance.api
.crateApiUsearchApiRemoveVector(indexPath: indexPath, key: key);
Future<(BigInt, BigInt, BigInt, BigInt, BigInt)> getIndexStats();
Future<void> resetIndex({required String indexPath}) =>
RustLib.instance.api.crateApiUsearchApiResetIndex(indexPath: indexPath);
Future<Float32List> getVector({required BigInt key});
factory VectorDb({required String filePath, required BigInt dimensions}) =>
RustLib.instance.api.crateApiUsearchApiVectorDbNew(
filePath: filePath,
dimensions: dimensions,
);
Future<BigInt> removeVector({required BigInt key});
Future<void> resetIndex();
Future<Matches> searchVectors({
required List<double> query,
required BigInt count,
});
}

File diff suppressed because it is too large Load Diff

View File

@@ -20,6 +20,63 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
required super.portManager,
});
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_BoxErrorPtr => wire
._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynErrorPtr;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_MatchesPtr => wire
._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatchesPtr;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_VectorDbPtr => wire
._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr;
@protected
BoxError
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
dynamic raw,
);
@protected
Matches
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
dynamic raw,
);
@protected
VectorDb
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
VectorDb
dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
VectorDb
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
BoxError
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
dynamic raw,
);
@protected
Matches
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
dynamic raw,
);
@protected
VectorDb
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
String dco_decode_String(dynamic raw);
@@ -41,12 +98,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
(
Uint64List,
Float32List
) dco_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(dynamic raw);
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
dco_decode_record_usize_usize_usize_usize_usize(dynamic raw);
@@ -63,6 +114,54 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt dco_decode_usize(dynamic raw);
@protected
BoxError
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
SseDeserializer deserializer,
);
@protected
Matches
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
BoxError
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
SseDeserializer deserializer,
);
@protected
Matches
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
String sse_decode_String(SseDeserializer deserializer);
@@ -86,12 +185,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
(Uint64List, Float32List)
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(
SseDeserializer deserializer,
);
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
sse_decode_record_usize_usize_usize_usize_usize(
@@ -116,6 +209,62 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
BoxError self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
Matches self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
BoxError self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
Matches self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@@ -152,12 +301,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void sse_encode_record_list_prim_u_64_strict_list_prim_f_32_strict(
(Uint64List, Float32List) self,
SseSerializer serializer,
);
@protected
void sse_encode_record_usize_usize_usize_usize_usize(
(BigInt, BigInt, BigInt, BigInt, BigInt) self,
@@ -196,4 +339,106 @@ class RustLibWire implements BaseWire {
/// The symbols are looked up in [dynamicLibrary].
RustLibWire(ffi.DynamicLibrary dynamicLibrary)
: _lookup = dynamicLibrary.lookup;
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynErrorPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError',
);
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynErrorPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynErrorPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError',
);
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynErrorPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatchesPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches',
);
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatchesPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatchesPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches',
);
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatchesPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB',
);
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB',
);
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
}

View File

@@ -22,6 +22,63 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
required super.portManager,
});
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_BoxErrorPtr => wire
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_MatchesPtr => wire
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_VectorDbPtr => wire
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB;
@protected
BoxError
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
dynamic raw,
);
@protected
Matches
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
dynamic raw,
);
@protected
VectorDb
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
VectorDb
dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
VectorDb
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
BoxError
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
dynamic raw,
);
@protected
Matches
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
dynamic raw,
);
@protected
VectorDb
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
@protected
String dco_decode_String(dynamic raw);
@@ -43,12 +100,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
(
Uint64List,
Float32List
) dco_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(dynamic raw);
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
dco_decode_record_usize_usize_usize_usize_usize(dynamic raw);
@@ -65,6 +116,54 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt dco_decode_usize(dynamic raw);
@protected
BoxError
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
SseDeserializer deserializer,
);
@protected
Matches
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
BoxError
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
SseDeserializer deserializer,
);
@protected
Matches
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
SseDeserializer deserializer,
);
@protected
VectorDb
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
@protected
String sse_decode_String(SseDeserializer deserializer);
@@ -88,12 +187,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
(Uint64List, Float32List)
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(
SseDeserializer deserializer,
);
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
sse_decode_record_usize_usize_usize_usize_usize(
@@ -118,6 +211,62 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
BoxError self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
Matches self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
BoxError self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
Matches self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@@ -154,12 +303,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void sse_encode_record_list_prim_u_64_strict_list_prim_f_32_strict(
(Uint64List, Float32List) self,
SseSerializer serializer,
);
@protected
void sse_encode_record_usize_usize_usize_usize_usize(
(BigInt, BigInt, BigInt, BigInt, BigInt) self,
@@ -189,6 +332,60 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
class RustLibWire implements BaseWire {
RustLibWire.fromExternalLibrary(ExternalLibrary lib);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
int ptr,
) =>
wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
int ptr,
) =>
wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr,
);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
int ptr,
) =>
wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
int ptr,
) =>
wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr,
);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
) =>
wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
) =>
wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr,
);
}
@JS('wasm_bindgen')
@@ -196,4 +393,34 @@ external RustLibWasmModule get wasmModule;
@JS()
@anonymous
extension type RustLibWasmModule._(JSObject _) implements JSObject {}
extension type RustLibWasmModule._(JSObject _) implements JSObject {
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
int ptr,
);
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
int ptr,
);
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
);
}

View File

@@ -89,15 +89,19 @@ class _MLDebugSectionWidgetState extends State<MLDebugSectionWidget> {
final tenKeys =
Uint64List.fromList(tenVectors.map((e) => e.fileID).toList());
final indexPath = (await getApplicationSupportDirectory()).path +
"/ml/test1/vector_db";
final stats = await getIndexStats(indexPath: indexPath);
"/ml/test/vector_db_index.usearch";
final rustVectorDB = VectorDb(
filePath: indexPath,
dimensions: BigInt.from(tenEmbeddings.first.length),
);
await rustVectorDB.resetIndex();
final stats = await rustVectorDB.getIndexStats();
logger.info("vector_db stats: $stats");
await bulkAddVectors(
indexPath: indexPath,
await rustVectorDB.bulkAddVectors(
keys: tenKeys,
vectors: tenEmbeddings,
);
final statsAgain = await getIndexStats(indexPath: indexPath);
final statsAgain = await rustVectorDB.getIndexStats();
logger.info("vector_db stats again: $statsAgain");
final size = statsAgain.$1;
final capacity = statsAgain.$2;
@@ -106,6 +110,7 @@ class _MLDebugSectionWidgetState extends State<MLDebugSectionWidget> {
context,
"Size: $size, Capacity: $capacity, Dimensions: $dimensions",
);
await rustVectorDB.deleteIndex();
} catch (e, s) {
logger.warning('Rust bridge failed ', e, s);
await showGenericErrorDialog(context: context, error: e);

View File

@@ -1,114 +1,124 @@
use usearch::{Index, IndexOptions, MetricKind, ScalarKind};
use flutter_rust_bridge::frb;
use usearch::{ffi::Matches, Index, IndexOptions, MetricKind, ScalarKind};
// Create DB index
fn create_index() -> Index {
let mut options = IndexOptions::default();
options.dimensions = 512; // Set the number of dimensions for vectors
options.metric = MetricKind::Cos; // Use cosine similarity for distance measurement
options.quantization = ScalarKind::F32; // Use 32-bit floating point numbers
options.connectivity = 0; // zero for auto
options.expansion_add = 0; // zero for auto
options.expansion_search = 0; // zero for auto
use std::error::Error;
use std::path::PathBuf;
let index = Index::new(&options).expect("Failed to create index.");
index.reserve(1000).expect("Failed to reserve capacity.");
index
#[frb(opaque)]
pub struct VectorDB {
index: Index,
path: PathBuf,
}
// Get the DB
fn get_index(file_path: &str) -> Index {
let file_exists: bool = std::path::Path::new(file_path).try_exists().unwrap();
let index = create_index();
if file_exists {
// Load into the existing index instead of creating a new variable
index.load(file_path).expect("Failed to load index.");
} else {
save_index(&index, file_path);
impl VectorDB {
#[frb(sync)]
pub fn new(file_path: &str, dimensions: usize) -> Result<Self, Box<dyn Error>> {
let path = PathBuf::from(file_path);
let file_exists = path.try_exists().unwrap_or(false);
let mut options = IndexOptions::default();
options.dimensions = dimensions;
options.metric = MetricKind::IP;
options.quantization = ScalarKind::F32;
options.connectivity = 0; // auto
options.expansion_add = 0; // auto
options.expansion_search = 0; // auto
let index = Index::new(&options)?;
index.reserve(1000)?;
let db = Self { index, path };
if file_exists {
println!("Loading index from disk.");
db.index.load(file_path)?;
} else {
println!("Creating new index.");
db.save_index()?;
}
Ok(db)
}
index
}
// Save to disk
fn save_index(index: &Index, file_path: &str) {
// Ensure directory exists
if let Some(parent) = std::path::Path::new(file_path).parent() {
std::fs::create_dir_all(parent).expect("Failed to create directory for index.");
fn save_index(&self) -> Result<(), Box<dyn Error>> {
// Ensure directory exists
if let Some(parent) = self.path.parent() {
std::fs::create_dir_all(parent)?;
}
self.index.save(self.path.to_str().unwrap())?;
Ok(())
}
index.save(file_path).expect("Failed to save index.");
}
// Changes to DB index
fn ensure_capacity(index: &Index, margin: usize) {
let current_size = index.size();
let capacity = index.capacity();
if current_size + margin >= capacity {
index
.reserve(current_size + margin)
.expect("Failed to reserve capacity.");
fn ensure_capacity(&self, margin: usize) -> Result<(), Box<dyn Error>> {
let current_size = self.index.size();
let capacity = self.index.capacity();
if current_size + margin >= capacity {
self.index.reserve(current_size + margin)?;
}
Ok(())
}
pub fn add_vector(&mut self, key: u64, vector: &Vec<f32>) -> Result<(), Box<dyn Error>> {
self.ensure_capacity(1)?;
self.index.add(key, vector)?;
self.save_index()?;
Ok(())
}
pub fn bulk_add_vectors(
&mut self,
keys: Vec<u64>,
vectors: &Vec<Vec<f32>>,
) -> Result<(), Box<dyn Error>> {
self.ensure_capacity(keys.len())?;
for (key, vector) in keys.iter().zip(vectors.iter()) {
self.index.add(*key, vector)?;
}
self.save_index()?;
Ok(())
}
pub fn search_vectors(
&self,
query: &Vec<f32>,
count: usize,
) -> Result<Matches, Box<dyn Error>> {
Ok(self.index.search(query, count)?)
}
pub fn get_vector(&self, key: u64) -> Result<Vec<f32>, Box<dyn Error>> {
let mut vector: Vec<f32> = vec![0.0; self.index.dimensions()];
self.index.get(key, &mut vector)?;
Ok(vector)
}
pub fn remove_vector(&mut self, key: u64) -> Result<usize, Box<dyn Error>> {
let removed_count = self.index.remove(key)?;
self.save_index()?;
Ok(removed_count)
}
pub fn reset_index(&mut self) -> Result<(), Box<dyn Error>> {
self.index.reset()?;
self.save_index()?;
Ok(())
}
pub fn delete_index(self) -> Result<(), Box<dyn Error>> {
if self.path.exists() {
std::fs::remove_file(&self.path)?;
} else {
println!("Index file does not exist.");
}
Ok(())
}
pub fn get_index_stats(self) -> (usize, usize, usize, usize, usize) {
let size = self.index.size();
let capacity = self.index.capacity();
let dimensions = self.index.dimensions();
let expansion_add = self.index.expansion_add();
let expansion_search = self.index.expansion_search();
(size, capacity, dimensions, expansion_add, expansion_search)
}
}
pub fn get_index_stats(index_path: &str) -> (usize, usize, usize, usize, usize) {
let index = get_index(index_path);
let size = index.size();
let capacity = index.capacity();
let dimensions = index.dimensions();
let expansion_add = index.expansion_add();
let expansion_search = index.expansion_search();
(size, capacity, dimensions, expansion_add, expansion_search)
}
// Add to index
pub fn add_vector(index_path: &str, key: u64, vector: &Vec<f32>) {
let index = get_index(index_path);
ensure_capacity(&index, 1);
index.add(key, vector).expect("Failed to add vector.");
save_index(&index, index_path);
}
// Bulk add to index
pub fn bulk_add_vectors(index_path: &str, keys: Vec<u64>, vectors: &Vec<Vec<f32>>) {
let index = get_index(index_path);
ensure_capacity(&index, keys.len());
for (key, vector) in keys.iter().zip(vectors.iter()) {
index.add(*key, vector).expect("Failed to add vector.");
}
save_index(&index, index_path);
}
// Search in index
pub fn search_vectors(index_path: &str, query: &Vec<f32>, count: usize) -> (Vec<u64>, Vec<f32>) {
let index: Index = get_index(index_path);
let results = index.search(query, count).expect("Search failed.");
(results.keys, results.distances)
}
// Read from index
pub fn get_vector(index_path: &str, key: u64) -> Vec<f32> {
let index = get_index(index_path);
let mut vector: Vec<f32> = vec![0.0; index.dimensions()];
let _ = index
.get(key, &mut vector)
.expect("Failed to export vector.");
vector
}
// Delete from index
pub fn remove_vector(index_path: &str, key: u64) -> usize {
let index = get_index(index_path);
let removed_count = index.remove(key).expect("Failed to remove vector.");
save_index(&index, index_path);
removed_count
}
// Reset index
pub fn reset_index(index_path: &str) {
let index = get_index(index_path);
index.reset().expect("Failed to clear index.");
save_index(&index, index_path);
}

View File

@@ -25,6 +25,7 @@
// Section: imports
use crate::api::usearch_api::*;
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};
@@ -37,7 +38,7 @@ flutter_rust_bridge::frb_generated_boilerplate!(
default_rust_auto_opaque = RustAutoOpaqueMoi,
);
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.9.0";
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 2006111302;
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 862168794;
// Section: executor
@@ -45,7 +46,7 @@ flutter_rust_bridge::frb_generated_default_handler!();
// Section: wire_funcs
fn wire__crate__api__usearch_api__add_vector_impl(
fn wire__crate__api__usearch_api__VectorDb_add_vector_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
@@ -53,7 +54,7 @@ fn wire__crate__api__usearch_api__add_vector_impl(
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "add_vector",
debug_name: "VectorDb_add_vector",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
@@ -67,22 +68,40 @@ fn wire__crate__api__usearch_api__add_vector_impl(
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_index_path = <String>::sse_decode(&mut deserializer);
let api_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
let api_key = <u64>::sse_decode(&mut deserializer);
let api_vector = <Vec<f32>>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok({
crate::api::usearch_api::add_vector(&api_index_path, api_key, &api_vector);
})?;
transform_result_sse::<_, Box<dyn Error>>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, true,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()),
_ => unreachable!(),
}
}
let mut api_that_guard = api_that_guard.unwrap();
let output_ok = crate::api::usearch_api::VectorDB::add_vector(
&mut *api_that_guard,
api_key,
&api_vector,
)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__bulk_add_vectors_impl(
fn wire__crate__api__usearch_api__VectorDb_bulk_add_vectors_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
@@ -90,7 +109,7 @@ fn wire__crate__api__usearch_api__bulk_add_vectors_impl(
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "bulk_add_vectors",
debug_name: "VectorDb_bulk_add_vectors",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
@@ -104,26 +123,40 @@ fn wire__crate__api__usearch_api__bulk_add_vectors_impl(
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_index_path = <String>::sse_decode(&mut deserializer);
let api_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
let api_keys = <Vec<u64>>::sse_decode(&mut deserializer);
let api_vectors = <Vec<Vec<f32>>>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok({
crate::api::usearch_api::bulk_add_vectors(
&api_index_path,
api_keys,
&api_vectors,
);
})?;
transform_result_sse::<_, Box<dyn Error>>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, true,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()),
_ => unreachable!(),
}
}
let mut api_that_guard = api_that_guard.unwrap();
let output_ok = crate::api::usearch_api::VectorDB::bulk_add_vectors(
&mut *api_that_guard,
api_keys,
&api_vectors,
)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__get_index_stats_impl(
fn wire__crate__api__usearch_api__VectorDb_delete_index_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
@@ -131,7 +164,7 @@ fn wire__crate__api__usearch_api__get_index_stats_impl(
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "get_index_stats",
debug_name: "VectorDb_delete_index",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
@@ -145,20 +178,53 @@ fn wire__crate__api__usearch_api__get_index_stats_impl(
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_index_path = <String>::sse_decode(&mut deserializer);
let api_that = <VectorDB>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, Box<dyn Error>>((move || {
let output_ok = crate::api::usearch_api::VectorDB::delete_index(api_that)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__VectorDb_get_index_stats_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: "VectorDb_get_index_stats",
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_that = <VectorDB>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok(crate::api::usearch_api::get_index_stats(
&api_index_path,
))?;
let output_ok = Result::<_, ()>::Ok(
crate::api::usearch_api::VectorDB::get_index_stats(api_that),
)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__get_vector_impl(
fn wire__crate__api__usearch_api__VectorDb_get_vector_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
@@ -166,7 +232,7 @@ fn wire__crate__api__usearch_api__get_vector_impl(
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "get_vector",
debug_name: "VectorDb_get_vector",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
@@ -180,15 +246,219 @@ fn wire__crate__api__usearch_api__get_vector_impl(
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_index_path = <String>::sse_decode(&mut deserializer);
let api_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
let api_key = <u64>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok(crate::api::usearch_api::get_vector(
&api_index_path,
transform_result_sse::<_, Box<dyn Error>>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, false,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()),
_ => unreachable!(),
}
}
let api_that_guard = api_that_guard.unwrap();
let output_ok =
crate::api::usearch_api::VectorDB::get_vector(&*api_that_guard, api_key)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__VectorDb_new_impl(
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
data_len_: i32,
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::<flutter_rust_bridge::for_generated::SseCodec, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "VectorDb_new",
port: None,
mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync,
},
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_file_path = <String>::sse_decode(&mut deserializer);
let api_dimensions = <usize>::sse_decode(&mut deserializer);
deserializer.end();
transform_result_sse::<_, Box<dyn Error>>((move || {
let output_ok =
crate::api::usearch_api::VectorDB::new(&api_file_path, api_dimensions)?;
Ok(output_ok)
})())
},
)
}
fn wire__crate__api__usearch_api__VectorDb_remove_vector_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: "VectorDb_remove_vector",
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_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
let api_key = <u64>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, Box<dyn Error>>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, true,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()),
_ => unreachable!(),
}
}
let mut api_that_guard = api_that_guard.unwrap();
let output_ok = crate::api::usearch_api::VectorDB::remove_vector(
&mut *api_that_guard,
api_key,
))?;
)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__VectorDb_reset_index_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: "VectorDb_reset_index",
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_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, Box<dyn Error>>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, true,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()),
_ => unreachable!(),
}
}
let mut api_that_guard = api_that_guard.unwrap();
let output_ok =
crate::api::usearch_api::VectorDB::reset_index(&mut *api_that_guard)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__VectorDb_search_vectors_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: "VectorDb_search_vectors",
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_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
let api_query = <Vec<f32>>::sse_decode(&mut deserializer);
let api_count = <usize>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, Box<dyn Error>>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, false,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()),
_ => unreachable!(),
}
}
let api_that_guard = api_that_guard.unwrap();
let output_ok = crate::api::usearch_api::VectorDB::search_vectors(
&*api_that_guard,
&api_query,
api_count,
)?;
Ok(output_ok)
})())
}
@@ -259,120 +529,79 @@ fn wire__crate__api__simple__init_app_impl(
},
)
}
fn wire__crate__api__usearch_api__remove_vector_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: "remove_vector",
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_index_path = <String>::sse_decode(&mut deserializer);
let api_key = <u64>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok(crate::api::usearch_api::remove_vector(
&api_index_path,
api_key,
))?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__reset_index_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: "reset_index",
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_index_path = <String>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok({
crate::api::usearch_api::reset_index(&api_index_path);
})?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__search_vectors_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: "search_vectors",
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_index_path = <String>::sse_decode(&mut deserializer);
let api_query = <Vec<f32>>::sse_decode(&mut deserializer);
let api_count = <usize>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let output_ok = Result::<_, ()>::Ok(crate::api::usearch_api::search_vectors(
&api_index_path,
&api_query,
api_count,
))?;
Ok(output_ok)
})())
}
},
)
}
// Section: related_funcs
flutter_rust_bridge::frb_generated_moi_arc_impl_value!(
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box<dyn Error>>
);
flutter_rust_bridge::frb_generated_moi_arc_impl_value!(
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>
);
flutter_rust_bridge::frb_generated_moi_arc_impl_value!(
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>
);
// Section: dart2rust
impl SseDecode for Box<dyn Error> {
// 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<Box<dyn Error>>,
>>::sse_decode(deserializer);
return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner);
}
}
impl SseDecode for Matches {
// 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<Matches>,
>>::sse_decode(deserializer);
return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner);
}
}
impl SseDecode for VectorDB {
// 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<VectorDB>,
>>::sse_decode(deserializer);
return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner);
}
}
impl SseDecode
for RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box<dyn Error>>>
{
// 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 RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>> {
// 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 RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>
{
// 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 {
@@ -436,15 +665,6 @@ impl SseDecode for Vec<u8> {
}
}
impl SseDecode for (Vec<u64>, Vec<f32>) {
// 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 = <Vec<u64>>::sse_decode(deserializer);
let mut var_field1 = <Vec<f32>>::sse_decode(deserializer);
return (var_field0, var_field1);
}
}
impl SseDecode for (usize, usize, usize, usize, usize) {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -506,16 +726,55 @@ fn pde_ffi_dispatcher_primary_impl(
) {
// Codec=Pde (Serialization + dispatch), see doc to use other codecs
match func_id {
1 => wire__crate__api__usearch_api__add_vector_impl(port, ptr, rust_vec_len, data_len),
2 => {
wire__crate__api__usearch_api__bulk_add_vectors_impl(port, ptr, rust_vec_len, data_len)
}
3 => wire__crate__api__usearch_api__get_index_stats_impl(port, ptr, rust_vec_len, data_len),
4 => wire__crate__api__usearch_api__get_vector_impl(port, ptr, rust_vec_len, data_len),
6 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len),
7 => wire__crate__api__usearch_api__remove_vector_impl(port, ptr, rust_vec_len, data_len),
8 => wire__crate__api__usearch_api__reset_index_impl(port, ptr, rust_vec_len, data_len),
9 => wire__crate__api__usearch_api__search_vectors_impl(port, ptr, rust_vec_len, data_len),
1 => wire__crate__api__usearch_api__VectorDb_add_vector_impl(
port,
ptr,
rust_vec_len,
data_len,
),
2 => wire__crate__api__usearch_api__VectorDb_bulk_add_vectors_impl(
port,
ptr,
rust_vec_len,
data_len,
),
3 => wire__crate__api__usearch_api__VectorDb_delete_index_impl(
port,
ptr,
rust_vec_len,
data_len,
),
4 => wire__crate__api__usearch_api__VectorDb_get_index_stats_impl(
port,
ptr,
rust_vec_len,
data_len,
),
5 => wire__crate__api__usearch_api__VectorDb_get_vector_impl(
port,
ptr,
rust_vec_len,
data_len,
),
7 => wire__crate__api__usearch_api__VectorDb_remove_vector_impl(
port,
ptr,
rust_vec_len,
data_len,
),
8 => wire__crate__api__usearch_api__VectorDb_reset_index_impl(
port,
ptr,
rust_vec_len,
data_len,
),
9 => wire__crate__api__usearch_api__VectorDb_search_vectors_impl(
port,
ptr,
rust_vec_len,
data_len,
),
11 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len),
_ => unreachable!(),
}
}
@@ -528,13 +787,111 @@ fn pde_ffi_dispatcher_sync_impl(
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
// Codec=Pde (Serialization + dispatch), see doc to use other codecs
match func_id {
5 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len),
6 => wire__crate__api__usearch_api__VectorDb_new_impl(ptr, rust_vec_len, data_len),
10 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len),
_ => unreachable!(),
}
}
// Section: rust2dart
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for FrbWrapper<Box<dyn Error>> {
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<Box<dyn Error>> {}
impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<Box<dyn Error>>> for Box<dyn Error> {
fn into_into_dart(self) -> FrbWrapper<Box<dyn Error>> {
self.into()
}
}
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for FrbWrapper<Matches> {
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<Matches> {}
impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<Matches>> for Matches {
fn into_into_dart(self) -> FrbWrapper<Matches> {
self.into()
}
}
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for FrbWrapper<VectorDB> {
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<VectorDB> {}
impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<VectorDB>> for VectorDB {
fn into_into_dart(self) -> FrbWrapper<VectorDB> {
self.into()
}
}
impl SseEncode for Box<dyn Error> {
// 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<Box < dyn Error >>>>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer);
}
}
impl SseEncode for Matches {
// 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<Matches>>>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer);
}
}
impl SseEncode for VectorDB {
// 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<VectorDB>>>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer);
}
}
impl SseEncode
for RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box<dyn Error>>>
{
// 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 RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>> {
// 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 RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>
{
// 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) {
@@ -589,14 +946,6 @@ impl SseEncode for Vec<u8> {
}
}
impl SseEncode for (Vec<u64>, Vec<f32>) {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<Vec<u64>>::sse_encode(self.0, serializer);
<Vec<f32>>::sse_encode(self.1, serializer);
}
}
impl SseEncode for (usize, usize, usize, usize, usize) {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -659,6 +1008,7 @@ mod io {
// Section: imports
use super::*;
use crate::api::usearch_api::*;
use flutter_rust_bridge::for_generated::byteorder::{
NativeEndian, ReadBytesExt, WriteBytesExt,
};
@@ -668,6 +1018,48 @@ mod io {
// Section: boilerplate
flutter_rust_bridge::frb_generated_boilerplate_io!();
#[unsafe(no_mangle)]
pub extern "C" fn frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box < dyn Error >>>::increment_strong_count(ptr as _);
}
#[unsafe(no_mangle)]
pub extern "C" fn frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box < dyn Error >>>::decrement_strong_count(ptr as _);
}
#[unsafe(no_mangle)]
pub extern "C" fn frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>>::increment_strong_count(ptr as _);
}
#[unsafe(no_mangle)]
pub extern "C" fn frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>>::decrement_strong_count(ptr as _);
}
#[unsafe(no_mangle)]
pub extern "C" fn frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>::increment_strong_count(ptr as _);
}
#[unsafe(no_mangle)]
pub extern "C" fn frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>::decrement_strong_count(ptr as _);
}
}
#[cfg(not(target_family = "wasm"))]
pub use io::*;
@@ -681,6 +1073,7 @@ mod web {
// Section: imports
use super::*;
use crate::api::usearch_api::*;
use flutter_rust_bridge::for_generated::byteorder::{
NativeEndian, ReadBytesExt, WriteBytesExt,
};
@@ -692,6 +1085,48 @@ mod web {
// Section: boilerplate
flutter_rust_bridge::frb_generated_boilerplate_web!();
#[wasm_bindgen]
pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box < dyn Error >>>::increment_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBoxdynError(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Box < dyn Error >>>::decrement_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>>::increment_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerMatches(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Matches>>::decrement_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>::increment_strong_count(ptr as _);
}
#[wasm_bindgen]
pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr: *const std::ffi::c_void,
) {
MoiArc::<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>>::decrement_strong_count(ptr as _);
}
}
#[cfg(target_family = "wasm")]
pub use web::*;