Merge pull request #235 from ZhuJHua/develop

feat: integrate Jieba for keyword extraction and search optimization
This commit is contained in:
住京华
2025-04-18 12:01:29 +08:00
committed by GitHub
34 changed files with 3090 additions and 1610 deletions

View File

@@ -20,3 +20,5 @@ analyzer:
- "android/**"
- "windows/**"
- "macos/**"
errors:
invalid_annotation_target: ignore

View File

@@ -1,3 +1,4 @@
rust_input: crate::api
rust_root: rust/
dart_output: lib/src/rust
dart_output: lib/src/rust
web: false

View File

@@ -67,6 +67,12 @@ class Diary {
// 位置信息
List<String> position = [];
// 关键词
List<String> keywords = [];
// 分词
List<String> tokenizer = [];
// 类型,富文本还是纯文本,不会为空,延迟加载
late String type;
@@ -97,6 +103,8 @@ class Diary {
const ListEquality().equals(videoName, other.videoName) &&
const ListEquality().equals(tags, other.tags) &&
const ListEquality().equals(position, other.position) &&
const ListEquality().equals(keywords, other.keywords) &&
const ListEquality().equals(tokenizer, other.tokenizer) &&
type == other.type &&
imageColor == other.imageColor &&
aspect == other.aspect;
@@ -118,6 +126,8 @@ class Diary {
const ListEquality().hash(videoName) ^
const ListEquality().hash(tags) ^
const ListEquality().hash(position) ^
const ListEquality().hash(keywords) ^
const ListEquality().hash(tokenizer) ^
type.hashCode ^
imageColor.hashCode ^
aspect.hashCode;
@@ -145,6 +155,8 @@ class Diary {
..videoName = List<String>.from(videoName)
..tags = List<String>.from(tags)
..position = List<String>.from(position)
..keywords = List<String>.from(keywords)
..tokenizer = List<String>.from(tokenizer)
..type = type
..imageColor = imageColor
..aspect = aspect;
@@ -168,6 +180,8 @@ class Diary {
'videoName': videoName,
'tags': tags,
'position': position,
'keywords': keywords,
'tokenizer': tokenizer,
'type': type,
'imageColor': imageColor,
'aspect': aspect,
@@ -191,6 +205,8 @@ class Diary {
..videoName = List<String>.from(json['videoName'] as List)
..tags = List<String>.from(json['tags'] as List)
..position = List<String>.from(json['position'] as List)
..keywords = List<String>.from(json['keywords'] as List)
..tokenizer = List<String>.from(json['tokenizer'] as List)
..type = json['type'] as String
..imageColor = json['imageColor'] as int?
..aspect = (json['aspect'] as num?)?.toDouble();

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,6 @@ import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:moodiary/utils/cache_util.dart';
import 'package:moodiary/utils/log_util.dart';
final kTransparentImage = Uint8List.fromList(<int>[
0x89,
@@ -149,7 +148,7 @@ class _MoodiaryImageState extends State<MoodiaryImage> {
void _loadImage() async {
_loadState.value = _ImageLoadState.loading;
try {
logger.d('Image loaded from path: ${widget.imagePath}');
//logger.d('Image loaded from path: ${widget.imagePath}');
final imageAspect = await ImageCacheUtil().getImageAspectRatioWithCache(
imagePath: widget.imagePath,
);

View File

@@ -17,7 +17,7 @@ class FloatingModal extends StatelessWidget {
@override
Widget build(BuildContext context) {
final padding = MediaQuery.viewPaddingOf(context);
final padding = MediaQuery.viewInsetsOf(context);
final size = MediaQuery.sizeOf(context);
final maxHeight =
isScrollControlled
@@ -26,12 +26,12 @@ class FloatingModal extends StatelessWidget {
return Align(
alignment: Alignment.bottomCenter,
child: ConstrainedBox(
constraints: BoxConstraints(maxHeight: maxHeight, maxWidth: 640),
constraints: BoxConstraints(maxHeight: maxHeight+padding.bottom, maxWidth: 640),
child: Padding(
padding: EdgeInsets.only(
left: 16,
right: 16,
bottom: max(padding.bottom, 16),
bottom: max(padding.bottom + 16, 16),
),
child: Material(
color: context.theme.colorScheme.surfaceContainerHigh,

View File

@@ -1,16 +0,0 @@
import 'package:get/get.dart';
import 'package:moodiary/common/models/isar/diary.dart';
import 'package:moodiary/pages/diary_details/diary_details_logic.dart';
import 'package:moodiary/router/app_routes.dart';
import 'search_card_state.dart';
class SearchCardLogic extends GetxController {
final SearchCardState state = SearchCardState();
//选中卡片后跳转到详情页直接携带Diary作为参数
Future<void> toDiaryPage(Diary diary) async {
Bind.lazyPut(() => DiaryDetailsLogic(), tag: diary.id);
await Get.toNamed(AppRoutes.diaryPage, arguments: [diary.clone(), false]);
}
}

View File

@@ -1,5 +0,0 @@
class SearchCardState {
SearchCardState() {
///Initialize variables
}
}

View File

@@ -1,58 +1,123 @@
import 'package:dartx/dartx.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:moodiary/common/models/isar/diary.dart';
import 'package:moodiary/common/values/border.dart';
import 'package:moodiary/components/base/text.dart';
import 'package:moodiary/pages/diary_details/diary_details_logic.dart';
import 'package:moodiary/router/app_routes.dart';
import 'package:substring_highlight/substring_highlight.dart';
import 'search_card_logic.dart';
String getHighlightedExcerpt(
String content,
List<String> keywords, {
int contextLength = 50,
}) {
for (final word in keywords) {
final index = content.indexOf(word);
if (index != -1) {
final wordStart = index;
final wordEnd = index + word.length;
int start = wordStart - contextLength;
int end = wordEnd + contextLength;
if (start < 0) {
end += -start;
start = 0;
}
if (end > content.length) {
final overflow = end - content.length;
start = (start - overflow).clamp(0, content.length);
end = content.length;
}
final snippet = content.substring(start, end);
final hasHead = start > 0;
final hasTail = end < content.length;
return "${hasHead ? '...' : ''}$snippet${hasTail ? '...' : ''}";
}
}
// 没有关键词命中,返回默认摘要
final fallback = content.length > 200 ? content.substring(0, 200) : content;
return "${fallback.trimRight()}${content.length > 200 ? '...' : ''}";
}
class SearchCardComponent extends StatelessWidget {
const SearchCardComponent({
super.key,
required this.diary,
required this.index,
required this.queryList,
});
final List<String> queryList;
final Diary diary;
final String index;
@override
Widget build(BuildContext context) {
final logic = Bind.find<SearchCardLogic>(tag: index);
return GetBuilder<SearchCardLogic>(
tag: index,
assignId: true,
builder: (_) {
return InkWell(
onTap: () {
logic.toDiaryPage(diary);
},
child: Container(
decoration: BoxDecoration(
color: context.theme.colorScheme.surfaceContainerHighest,
borderRadius: AppBorderRadius.smallBorderRadius,
),
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
diary.contentText,
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
Text(diary.time.toString().split('.')[0]),
],
),
),
],
),
),
final contentText = getHighlightedExcerpt(
diary.contentText.removeLineBreaks(),
queryList,
);
final title = diary.title.removeLineBreaks();
return InkWell(
onTap: () async {
Bind.lazyPut(() => DiaryDetailsLogic(), tag: diary.id);
await Get.toNamed(
AppRoutes.diaryPage,
arguments: [diary.clone(), false],
);
},
child: Container(
decoration: BoxDecoration(
color: context.theme.colorScheme.surfaceContainerHighest,
borderRadius: AppBorderRadius.smallBorderRadius,
),
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 4.0,
children: [
if (title.isNotBlank)
SubstringHighlight(
text: title,
terms: queryList,
maxLines: 1,
overflow: TextOverflow.ellipsis,
textStyle: context.textTheme.titleMedium!.copyWith(
color: context.theme.colorScheme.onSurface,
),
textStyleHighlight: context.textTheme.titleMedium!
.copyWith(
backgroundColor: context.theme.colorScheme.primary,
color: context.theme.colorScheme.onPrimary,
),
),
SubstringHighlight(
text: contentText,
terms: queryList,
textStyle: context.textTheme.bodyMedium!.copyWith(
color: context.theme.colorScheme.onSurface,
),
textStyleHighlight: context.textTheme.bodyMedium!.copyWith(
backgroundColor: context.theme.colorScheme.primary,
color: context.theme.colorScheme.onPrimary,
),
),
Text(diary.time.toString().split('.')[0]),
],
),
),
],
),
),
);
}
}

View File

@@ -1,6 +1,13 @@
import 'dart:async';
import 'package:dartx/dartx.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:moodiary/common/values/keyboard_state.dart';
import 'package:moodiary/components/keyboard_listener/keyboard_listener.dart';
import 'package:moodiary/persistence/isar.dart';
import 'package:moodiary/src/rust/api/jieba.dart';
import 'package:throttling/throttling.dart';
import 'search_sheet_state.dart';
@@ -9,27 +16,97 @@ class SearchSheetLogic extends GetxController {
late TextEditingController textEditingController = TextEditingController();
late FocusNode focusNode = FocusNode();
late final KeyboardObserver _keyboardObserver;
late final Throttling _throttling = Throttling(
duration: const Duration(milliseconds: 500),
);
String _lastText = '';
Timer? _timer;
@override
void onInit() {
_keyboardObserver = KeyboardObserver(
onHeightChanged: (height) {
if (height > 0) {
state.keyboardHeight.value = height;
}
},
onStateChanged: (state) {
switch (state) {
case KeyboardState.opening:
break;
case KeyboardState.closing:
unFocus();
break;
case KeyboardState.closed:
break;
case KeyboardState.unknown:
break;
}
},
);
_keyboardObserver.start();
textEditingController.addListener(() {
_throttling.throttle(() async {
await doSearch();
});
});
_timer = Timer.periodic(const Duration(milliseconds: 500), (_) async {
final currentText = textEditingController.text.trim();
if (currentText != _lastText) {
_lastText = currentText;
if (currentText.isNotBlank) {
await doSearch();
} else {
clear();
}
}
});
super.onInit();
}
@override
void onClose() {
_keyboardObserver.stop();
textEditingController.dispose();
focusNode.dispose();
_throttling.close();
_timer?.cancel();
_timer = null;
super.onClose();
}
void clearSearch() {
state.searchList = [];
void unFocus() {
focusNode.unfocus();
}
void clear() {
state.searchList.clear();
state.totalCount.value = 0;
state.queryList = [];
state.isSearching.value = false;
update();
}
Future<void> search() async {
focusNode.unfocus();
if (textEditingController.text != '') {
state.isSearching.value = true;
state.searchList = await IsarUtil.searchDiaries(
textEditingController.text,
);
state.totalCount.value = state.searchList.length;
state.isSearching.value = false;
Future<void> doSearch() async {
final currentText = textEditingController.text.trim();
if (currentText == _lastText) {
return;
}
if (currentText.isBlank) {
clear();
return;
}
state.isSearching.value = true;
_lastText = currentText;
final queryList = await JiebaRs.cutForSearch(text: _lastText, hmm: true);
state.searchList = await IsarUtil.searchDiaries(queryList: queryList);
state.totalCount.value = state.searchList.length;
state.queryList = queryList;
state.isSearching.value = false;
}
}

View File

@@ -9,6 +9,10 @@ class SearchSheetState {
late RxInt totalCount;
RxDouble keyboardHeight = 0.0.obs;
late List<String> queryList = [];
SearchSheetState() {
searchList = [];
isSearching = false.obs;

View File

@@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:gap/gap.dart';
import 'package:get/get.dart';
import 'package:moodiary/common/values/border.dart';
import 'package:moodiary/components/search_card/search_card_logic.dart';
import 'package:moodiary/components/search_card/search_card_view.dart';
import 'package:moodiary/l10n/l10n.dart';
@@ -21,12 +22,7 @@ class SearchSheetComponent extends StatelessWidget {
return Column(
children: [
Padding(
padding: const EdgeInsets.only(
left: 8.0,
right: 8.0,
top: 8.0,
bottom: 4.0,
),
padding: const EdgeInsets.all(8.0),
child: TextField(
maxLines: 1,
controller: logic.textEditingController,
@@ -40,8 +36,8 @@ class SearchSheetComponent extends StatelessWidget {
filled: true,
labelText: context.l10n.diarySearch,
suffixIcon: IconButton(
onPressed: () {
logic.search();
onPressed: () async {
await logic.doSearch();
},
icon: const Icon(Icons.search),
),
@@ -49,32 +45,57 @@ class SearchSheetComponent extends StatelessWidget {
),
),
Obx(() {
return Expanded(
child:
state.isSearching.value
? const Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: state.searchList.length,
padding: EdgeInsets.zero,
itemBuilder: (context, index) {
Bind.lazyPut(
() => SearchCardLogic(),
tag: index.toString(),
);
return Padding(
padding: const EdgeInsets.only(
left: 8.0,
right: 8.0,
top: 4.0,
bottom: 4.0,
),
child: SearchCardComponent(
diary: state.searchList[index],
index: index.toString(),
),
);
},
Widget child;
if (state.isSearching.value && state.searchList.isEmpty) {
child = const Center(
key: ValueKey('loading'),
child: CircularProgressIndicator(),
);
} else if (state.searchList.isEmpty) {
child = Center(
key: const ValueKey('empty'),
child: FaIcon(
FontAwesomeIcons.boxOpen,
color: context.theme.colorScheme.onSurface,
size: 56,
),
);
} else {
child = Stack(
children: [
Positioned.fill(
child: ListView.separated(
itemCount: state.searchList.length,
padding: const EdgeInsets.symmetric(horizontal: 8.0),
itemBuilder: (context, index) {
return SearchCardComponent(
diary: state.searchList[index],
queryList: state.queryList,
);
},
separatorBuilder: (_, _) => const Gap(8.0),
),
),
if (state.isSearching.value && state.searchList.isNotEmpty)
Positioned.fill(
child: Container(
color: context.theme.colorScheme.surfaceContainer
.withValues(alpha: 0.8),
child: const Center(
key: ValueKey('loading2'),
child: CircularProgressIndicator(),
),
),
),
],
);
}
return Expanded(
child: AnimatedSwitcher(
duration: Durations.short3,
child: child,
),
);
}),
Padding(

View File

@@ -13,6 +13,7 @@ import 'package:moodiary/api/api.dart';
import 'package:moodiary/common/models/isar/diary.dart';
import 'package:moodiary/common/values/diary_type.dart';
import 'package:moodiary/common/values/keyboard_state.dart';
import 'package:moodiary/components/base/text.dart';
import 'package:moodiary/components/keyboard_listener/keyboard_listener.dart';
import 'package:moodiary/components/quill_embed/audio_embed.dart';
import 'package:moodiary/components/quill_embed/image_embed.dart';
@@ -22,6 +23,7 @@ import 'package:moodiary/l10n/l10n.dart';
import 'package:moodiary/persistence/isar.dart';
import 'package:moodiary/persistence/pref.dart';
import 'package:moodiary/router/app_routes.dart';
import 'package:moodiary/src/rust/api/jieba.dart';
import 'package:moodiary/src/rust/api/kmp.dart';
import 'package:moodiary/utils/file_util.dart';
import 'package:moodiary/utils/markdown_util.dart';
@@ -435,14 +437,25 @@ class EditLogic extends GetxController {
text: originContent,
replacements: {...imageNameMap, ...videoNameMap, ...audioNameMap},
);
final contentText = _toPlainText().removeLineBreaks();
final tokenizer = await JiebaRs.cutAll(text: contentText);
final keywords = await JiebaRs.extractKeywordsTfidf(
text: contentText,
topK: BigInt.from(5),
allowedPos: [],
);
final sortByWeight = keywords..sort((a, b) => b.weight.compareTo(a.weight));
final sortedKeywords = sortByWeight.map((e) => e.keyword).toList();
state.currentDiary
..title = titleTextEditingController.text
..content = content
..type = state.type.value
..contentText = _toPlainText()
..contentText = contentText
..audioName = state.audioNameList
..imageName = imageNameMap.values.toList()
..videoName = videoNameMap.values.toList()
..tokenizer = tokenizer
..keywords = sortedKeywords
..imageColor = await getCoverColor()
..aspect = await getCoverAspect();

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:io';
import 'package:get/get.dart';
import 'package:moodiary/persistence/isar.dart';
import 'package:moodiary/persistence/pref.dart';
import 'package:moodiary/utils/aes_util.dart';
import 'package:moodiary/utils/cache_util.dart';
@@ -85,4 +86,13 @@ class LaboratoryLogic extends GetxController {
return false;
}
}
bool generateFTSAndKeyword() {
try {
IsarUtil.mergeToV2_7_4(FileUtil.getRealPath('database', ''));
return true;
} catch (e) {
return false;
}
}
}

View File

@@ -108,6 +108,18 @@ class LaboratoryPage extends StatelessWidget {
},
title: const Text('清理图片缩略图缓存'),
),
const Gap(12),
ListTile(
onTap: () async {
final res = logic.generateFTSAndKeyword();
if (res) {
toast.success(message: '重新生成成功');
} else {
toast.error(message: '重新生成失败');
}
},
title: const Text('重新进行全文搜索索引'),
),
],
);
},

View File

@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'package:flutter/material.dart';
@@ -11,10 +12,12 @@ import 'package:moodiary/common/models/isar/font.dart';
import 'package:moodiary/common/models/isar/sync_record.dart';
import 'package:moodiary/common/models/map.dart';
import 'package:moodiary/common/values/diary_type.dart';
import 'package:moodiary/components/base/text.dart';
import 'package:moodiary/components/quill_embed/audio_embed.dart';
import 'package:moodiary/components/quill_embed/image_embed.dart';
import 'package:moodiary/components/quill_embed/video_embed.dart';
import 'package:moodiary/persistence/pref.dart';
import 'package:moodiary/src/rust/api/jieba.dart';
import 'package:moodiary/utils/file_util.dart';
import 'package:moodiary/utils/webdav_util.dart';
import 'package:path/path.dart';
@@ -201,28 +204,38 @@ class IsarUtil {
}
}
//查询日记
static Future<List<Diary>> searchDiaries(String value) async {
final contentResults =
await _isar.diarys
.where()
.showEqualTo(true)
.contentTextContains(value)
.findAllAsync();
final titleResults =
await _isar.diarys
.where()
.showEqualTo(true)
.titleContains(value)
.findAllAsync();
static Future<List<Diary>> searchDiaries({
required List<String> queryList,
}) async {
if (queryList.isEmpty) return [];
// 合并并去重
final combinedResults = {...contentResults, ...titleResults}.toList();
// 收集所有匹配关键词的内容结果
final HashSet<Diary> results = HashSet(
equals: (a, b) {
return a.isarId == b.isarId;
},
hashCode: (e) {
return e.isarId;
},
);
// 按时间排序
combinedResults.sort((a, b) => b.time.compareTo(a.time));
for (final word in queryList) {
final matches =
await _isar.diarys
.where()
.showEqualTo(true)
.tokenizerElementMatches(word, caseSensitive: false)
.or()
.titleContains(word, caseSensitive: false)
.findAllAsync();
results.addAll(matches);
}
return combinedResults;
// 按时间降序排序
final List<Diary> sortedResults =
results.toList()..sort((a, b) => b.time.compareTo(a.time));
return sortedResults;
}
static Future<List<Diary>> searchDiariesByTag(String value) async {
@@ -435,6 +448,37 @@ class IsarUtil {
isar.close();
}
/// 2.7.4 版本变更
/// 新增字段
/// 1. keywords 关键词
/// 2. tokenizer 分词器
static Future<void> mergeToV2_7_4(String dir) async {
final countDiary = _isar.diarys.where().count();
for (var i = 0; i < countDiary; i += 50) {
final diaries = await _isar.diarys.where().findAllAsync(
offset: i,
limit: 50,
);
for (final diary in diaries) {
final newContent = diary.contentText.removeLineBreaks();
diary.tokenizer = await JiebaRs.cutAll(text: newContent);
final keywords = await JiebaRs.extractKeywordsTfidf(
text: newContent,
topK: BigInt.from(5),
allowedPos: [],
);
final sortByWeight =
keywords..sort((a, b) => b.weight.compareTo(a.weight));
final sortedKeywords = sortByWeight.map((e) => e.keyword).toList();
diary.keywords = sortedKeywords;
diary.contentText = newContent;
await _isar.writeAsync((isar) {
isar.diarys.put(diary);
});
}
}
}
/// 2.6.3 修复
/// 修复之前webdav同步时没有同步分类的问题
/// 遍历所有日记,如果本地没有日记的分类,就创建一个分类,名称为分类名

View File

@@ -3,9 +3,8 @@
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<AesEncryption>>
abstract class AesEncryption implements RustOpaqueInterface {

View File

@@ -3,31 +3,13 @@
// 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`
// These functions are ignored because they are not marked as `pub`: `calculate_target_dimensions`, `compress`
// These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `ResizeOptions`
Future<Uint8List> compress({
required DynamicImage img,
required int dstHeight,
required int dstWidth,
required CompressFormat compressFormat,
required int quality,
}) => RustLib.instance.api.crateApiCompressCompress(
img: img,
dstHeight: dstHeight,
dstWidth: dstWidth,
compressFormat: compressFormat,
quality: quality,
);
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<DynamicImage>>
abstract class DynamicImage implements RustOpaqueInterface {}
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<ImageCompress>>
abstract class ImageCompress implements RustOpaqueInterface {
static Future<Uint8List> containWithOptions({

View File

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

View File

@@ -3,9 +3,8 @@
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<FontReader>>
abstract class FontReader implements RustOpaqueInterface {

View File

@@ -0,0 +1,58 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.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';
// These functions are ignored because they are not marked as `pub`: `convert_keywords`, `get_instance`, `init_global`, `new`
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `clone`, `fmt`
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<JiebaRs>>
abstract class JiebaRs implements RustOpaqueInterface {
static Future<List<String>> cut({required String text, required bool hmm}) =>
RustLib.instance.api.crateApiJiebaJiebaRsCut(text: text, hmm: hmm);
static Future<List<String>> cutAll({required String text}) =>
RustLib.instance.api.crateApiJiebaJiebaRsCutAll(text: text);
static Future<List<String>> cutForSearch({
required String text,
required bool hmm,
}) => RustLib.instance.api.crateApiJiebaJiebaRsCutForSearch(
text: text,
hmm: hmm,
);
static Future<List<Keyword>> extractKeywordsTextRank({
required String text,
required BigInt topK,
required List<String> allowedPos,
}) => RustLib.instance.api.crateApiJiebaJiebaRsExtractKeywordsTextRank(
text: text,
topK: topK,
allowedPos: allowedPos,
);
static Future<List<Keyword>> extractKeywordsTfidf({
required String text,
required BigInt topK,
required List<String> allowedPos,
}) => RustLib.instance.api.crateApiJiebaJiebaRsExtractKeywordsTfidf(
text: text,
topK: topK,
allowedPos: allowedPos,
);
}
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<Keyword>>
abstract class Keyword implements RustOpaqueInterface {
String get keyword;
double get weight;
set keyword(String keyword);
set weight(double weight);
}

View File

@@ -3,9 +3,8 @@
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
Future<Uint64List> buildPrefixTable({required List<String> pattern}) =>
RustLib.instance.api.crateApiKmpBuildPrefixTable(pattern: pattern);

View File

@@ -3,9 +3,8 @@
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These functions are ignored because they are not marked as `pub`: `read_file_to_vec`

File diff suppressed because it is too large Load Diff

View File

@@ -3,19 +3,18 @@
// 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 'dart:ffi' as ffi;
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart';
import 'api/aes.dart';
import 'api/compress.dart';
import 'api/constants.dart';
import 'api/font.dart';
import 'api/jieba.dart';
import 'api/kmp.dart';
import 'api/zip.dart';
import 'dart:async';
import 'dart:convert';
import 'dart:ffi' as ffi;
import 'frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart';
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
RustLibApiImplPlatform({
@@ -29,10 +28,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
get rust_arc_decrement_strong_count_AesEncryptionPtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryptionPtr;
CrossPlatformFinalizerArg
get rust_arc_decrement_strong_count_DynamicImagePtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImagePtr;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_FontReaderPtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReaderPtr;
@@ -40,6 +35,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
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_JiebaRsPtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRsPtr;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KeywordPtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeywordPtr;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr =>
wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr;
@@ -67,6 +68,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
dynamic raw,
);
@protected
JiebaRs
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
dynamic raw,
);
@protected
Keyword
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
dynamic raw,
);
@protected
Kmp
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
@@ -79,6 +92,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
dynamic raw,
);
@protected
Keyword
dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
dynamic raw,
);
@protected
Zip
dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
@@ -86,8 +105,8 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
);
@protected
DynamicImage
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
Keyword
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
dynamic raw,
);
@@ -106,12 +125,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
dynamic raw,
);
@protected
DynamicImage
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
dynamic raw,
);
@protected
FontReader
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
@@ -124,6 +137,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
dynamic raw,
);
@protected
JiebaRs
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
dynamic raw,
);
@protected
Keyword
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
dynamic raw,
);
@protected
Kmp
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
@@ -139,6 +164,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
String dco_decode_String(dynamic raw);
@protected
bool dco_decode_bool(dynamic raw);
@protected
CompressFormat dco_decode_box_autoadd_compress_format(dynamic raw);
@@ -154,9 +182,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
double dco_decode_f_32(dynamic raw);
@protected
double dco_decode_f_64(dynamic raw);
@protected
int dco_decode_i_32(dynamic raw);
@protected
List<Keyword>
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
dynamic raw,
);
@protected
List<String> dco_decode_list_Char(dynamic raw);
@@ -229,6 +266,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseDeserializer deserializer,
);
@protected
JiebaRs
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
SseDeserializer deserializer,
);
@protected
Keyword
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
SseDeserializer deserializer,
);
@protected
Kmp
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
@@ -241,6 +290,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseDeserializer deserializer,
);
@protected
Keyword
sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
SseDeserializer deserializer,
);
@protected
Zip
sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
@@ -248,8 +303,8 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
);
@protected
DynamicImage
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
Keyword
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
SseDeserializer deserializer,
);
@@ -272,12 +327,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseDeserializer deserializer,
);
@protected
DynamicImage
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer,
);
@protected
FontReader
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
@@ -290,6 +339,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseDeserializer deserializer,
);
@protected
JiebaRs
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
SseDeserializer deserializer,
);
@protected
Keyword
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
SseDeserializer deserializer,
);
@protected
Kmp
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
@@ -305,6 +366,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
String sse_decode_String(SseDeserializer deserializer);
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
CompressFormat sse_decode_box_autoadd_compress_format(
SseDeserializer deserializer,
@@ -322,9 +386,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
double sse_decode_f_32(SseDeserializer deserializer);
@protected
double sse_decode_f_64(SseDeserializer deserializer);
@protected
int sse_decode_i_32(SseDeserializer deserializer);
@protected
List<Keyword>
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
SseDeserializer deserializer,
);
@protected
List<String> sse_decode_list_Char(SseDeserializer deserializer);
@@ -384,9 +457,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt sse_decode_usize(SseDeserializer deserializer);
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
void sse_encode_AnyhowException(
AnyhowException self,
@@ -414,6 +484,20 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
JiebaRs self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
Keyword self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
@@ -428,6 +512,13 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
Keyword self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
@@ -437,8 +528,8 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self,
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
Keyword self,
SseSerializer serializer,
);
@@ -464,13 +555,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
@@ -485,6 +569,20 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
JiebaRs self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
Keyword self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
@@ -502,6 +600,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_String(String self, SseSerializer serializer);
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_compress_format(
CompressFormat self,
@@ -523,9 +624,19 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_f_32(double self, SseSerializer serializer);
@protected
void sse_encode_f_64(double self, SseSerializer serializer);
@protected
void sse_encode_i_32(int self, SseSerializer serializer);
@protected
void
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
List<Keyword> self,
SseSerializer serializer,
);
@protected
void sse_encode_list_Char(List<String> self, SseSerializer serializer);
@@ -597,9 +708,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_usize(BigInt self, SseSerializer serializer);
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
}
// Section: wire_class
@@ -650,40 +758,6 @@ class RustLibWire implements BaseWire {
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryptionPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImagePtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_moodiary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage',
);
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImagePtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImagePtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_moodiary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage',
);
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImagePtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
ffi.Pointer<ffi.Void> ptr,
@@ -752,6 +826,74 @@ class RustLibWire implements BaseWire {
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompressPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRsPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_moodiary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs',
);
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRsPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRsPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_moodiary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs',
);
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRs =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerJiebaRsPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
ptr,
);
}
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeywordPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_moodiary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword',
);
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeywordPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
ffi.Pointer<ffi.Void> ptr,
) {
return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword(
ptr,
);
}
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeywordPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_moodiary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword',
);
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeyword =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKeywordPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
ffi.Pointer<ffi.Void> ptr,

View File

@@ -1,774 +0,0 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// 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
// 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/aes.dart';
import 'api/compress.dart';
import 'api/constants.dart';
import 'api/font.dart';
import 'api/kmp.dart';
import 'api/zip.dart';
import 'frb_generated.dart';
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
RustLibApiImplPlatform({
required super.handler,
required super.wire,
required super.generalizedFrbRustBinding,
required super.portManager,
});
CrossPlatformFinalizerArg
get rust_arc_decrement_strong_count_AesEncryptionPtr =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption;
CrossPlatformFinalizerArg
get rust_arc_decrement_strong_count_DynamicImagePtr =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_FontReaderPtr =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader;
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;
CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ZipPtr =>
wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip;
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw);
@protected
AesEncryption
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
dynamic raw,
);
@protected
FontReader
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
dynamic raw,
);
@protected
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
Zip
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
dynamic raw,
);
@protected
Zip
dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
dynamic raw,
);
@protected
DynamicImage
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
dynamic raw,
);
@protected
String dco_decode_Char(dynamic raw);
@protected
Map<String, String> dco_decode_Map_String_String_None(dynamic raw);
@protected
Map<String, double> dco_decode_Map_String_f_32_None(dynamic raw);
@protected
AesEncryption
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
dynamic raw,
);
@protected
DynamicImage
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
dynamic raw,
);
@protected
FontReader
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
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
Zip
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
dynamic raw,
);
@protected
String dco_decode_String(dynamic raw);
@protected
CompressFormat dco_decode_box_autoadd_compress_format(dynamic raw);
@protected
int dco_decode_box_autoadd_u_32(dynamic raw);
@protected
int dco_decode_box_autoadd_u_8(dynamic raw);
@protected
CompressFormat dco_decode_compress_format(dynamic raw);
@protected
double dco_decode_f_32(dynamic raw);
@protected
int dco_decode_i_32(dynamic raw);
@protected
List<String> dco_decode_list_Char(dynamic raw);
@protected
List<String> dco_decode_list_String(dynamic raw);
@protected
List<int> dco_decode_list_prim_u_8_loose(dynamic raw);
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
Uint64List dco_decode_list_prim_usize_strict(dynamic raw);
@protected
List<(String, double)> dco_decode_list_record_string_f_32(dynamic raw);
@protected
List<(String, String)> dco_decode_list_record_string_string(dynamic raw);
@protected
String? dco_decode_opt_String(dynamic raw);
@protected
CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw);
@protected
int? dco_decode_opt_box_autoadd_u_32(dynamic raw);
@protected
int? dco_decode_opt_box_autoadd_u_8(dynamic raw);
@protected
(String, double) dco_decode_record_string_f_32(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);
@protected
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer);
@protected
AesEncryption
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
SseDeserializer deserializer,
);
@protected
FontReader
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
SseDeserializer deserializer,
);
@protected
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
Zip
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
SseDeserializer deserializer,
);
@protected
Zip
sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
SseDeserializer deserializer,
);
@protected
DynamicImage
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer,
);
@protected
String sse_decode_Char(SseDeserializer deserializer);
@protected
Map<String, String> sse_decode_Map_String_String_None(
SseDeserializer deserializer,
);
@protected
Map<String, double> sse_decode_Map_String_f_32_None(
SseDeserializer deserializer,
);
@protected
AesEncryption
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
SseDeserializer deserializer,
);
@protected
DynamicImage
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
SseDeserializer deserializer,
);
@protected
FontReader
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
SseDeserializer deserializer,
);
@protected
ImageCompress
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
SseDeserializer deserializer,
);
@protected
Kmp
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(
SseDeserializer deserializer,
);
@protected
Zip
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
SseDeserializer deserializer,
);
@protected
String sse_decode_String(SseDeserializer deserializer);
@protected
CompressFormat sse_decode_box_autoadd_compress_format(
SseDeserializer deserializer,
);
@protected
int sse_decode_box_autoadd_u_32(SseDeserializer deserializer);
@protected
int sse_decode_box_autoadd_u_8(SseDeserializer deserializer);
@protected
CompressFormat sse_decode_compress_format(SseDeserializer deserializer);
@protected
double sse_decode_f_32(SseDeserializer deserializer);
@protected
int sse_decode_i_32(SseDeserializer deserializer);
@protected
List<String> sse_decode_list_Char(SseDeserializer deserializer);
@protected
List<String> sse_decode_list_String(SseDeserializer deserializer);
@protected
List<int> sse_decode_list_prim_u_8_loose(SseDeserializer deserializer);
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer);
@protected
List<(String, double)> sse_decode_list_record_string_f_32(
SseDeserializer deserializer,
);
@protected
List<(String, String)> sse_decode_list_record_string_string(
SseDeserializer deserializer,
);
@protected
String? sse_decode_opt_String(SseDeserializer deserializer);
@protected
CompressFormat? sse_decode_opt_box_autoadd_compress_format(
SseDeserializer deserializer,
);
@protected
int? sse_decode_opt_box_autoadd_u_32(SseDeserializer deserializer);
@protected
int? sse_decode_opt_box_autoadd_u_8(SseDeserializer deserializer);
@protected
(String, double) sse_decode_record_string_f_32(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);
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
void sse_encode_AnyhowException(
AnyhowException self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
AesEncryption self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
FontReader self,
SseSerializer serializer,
);
@protected
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_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
Zip self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
Zip self,
SseSerializer serializer,
);
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self,
SseSerializer serializer,
);
@protected
void sse_encode_Char(String self, SseSerializer serializer);
@protected
void sse_encode_Map_String_String_None(
Map<String, String> self,
SseSerializer serializer,
);
@protected
void sse_encode_Map_String_f_32_None(
Map<String, double> self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
AesEncryption self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
DynamicImage self,
SseSerializer serializer,
);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
FontReader self,
SseSerializer serializer,
);
@protected
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_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
Zip self,
SseSerializer serializer,
);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_compress_format(
CompressFormat self,
SseSerializer serializer,
);
@protected
void sse_encode_box_autoadd_u_32(int self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_u_8(int self, SseSerializer serializer);
@protected
void sse_encode_compress_format(
CompressFormat self,
SseSerializer serializer,
);
@protected
void sse_encode_f_32(double self, SseSerializer serializer);
@protected
void sse_encode_i_32(int self, SseSerializer serializer);
@protected
void sse_encode_list_Char(List<String> self, SseSerializer serializer);
@protected
void sse_encode_list_String(List<String> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_8_loose(List<int> self, SseSerializer serializer);
@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_f_32(
List<(String, double)> self,
SseSerializer serializer,
);
@protected
void sse_encode_list_record_string_string(
List<(String, String)> self,
SseSerializer serializer,
);
@protected
void sse_encode_opt_String(String? self, SseSerializer serializer);
@protected
void sse_encode_opt_box_autoadd_compress_format(
CompressFormat? self,
SseSerializer serializer,
);
@protected
void sse_encode_opt_box_autoadd_u_32(int? self, SseSerializer serializer);
@protected
void sse_encode_opt_box_autoadd_u_8(int? self, SseSerializer serializer);
@protected
void sse_encode_record_string_f_32(
(String, double) 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);
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
}
// Section: wire_class
class RustLibWire implements BaseWire {
RustLibWire.fromExternalLibrary(ExternalLibrary lib);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
int ptr,
) => wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
int ptr,
) => wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
ptr,
);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
int ptr,
) => wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
int ptr,
) => wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
ptr,
);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
int ptr,
) => wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
int ptr,
) => wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
ptr,
);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
int ptr,
) => wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
int ptr,
) => 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,
);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
int ptr,
) => wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
ptr,
);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
int ptr,
) => wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
ptr,
);
}
@JS('wasm_bindgen')
external RustLibWasmModule get wasmModule;
@JS()
@anonymous
extension type RustLibWasmModule._(JSObject _) implements JSObject {
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerAesEncryption(
int ptr,
);
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(
int ptr,
);
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerFontReader(
int ptr,
);
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(
int ptr,
);
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,
);
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
int ptr,
);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerZip(
int ptr,
);
}

View File

@@ -30,14 +30,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.11.0"
analyzer_plugin:
dependency: transitive
description:
name: analyzer_plugin
sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161"
url: "https://pub.dev"
source: hosted
version: "0.11.3"
animated_stack_widget:
dependency: transitive
description:
@@ -402,10 +394,10 @@ packages:
dependency: "direct main"
description:
name: chewie
sha256: df6711bc3ba165ad19cb496e350250be5673327f79c61c9cc8a15088ed8007ed
sha256: "4d9554a8f87cc2dc6575dfd5ad20a4375015a29edd567fd6733febe6365e2566"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
version: "1.11.3"
cli_util:
dependency: transitive
description:
@@ -518,22 +510,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
custom_lint_core:
dependency: transitive
description:
name: custom_lint_core
sha256: "02450c3e45e2a6e8b26c4d16687596ab3c4644dd5792e3313aa9ceba5a49b7f5"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
custom_lint_visitor:
dependency: transitive
description:
name: custom_lint_visitor
sha256: bfe9b7a09c4775a587b58d10ebb871d4fe618237639b1e84d5ec62d7dfef25f9
url: "https://pub.dev"
source: hosted
version: "1.0.0+6.11.0"
dart_earcut:
dependency: transitive
description:
@@ -554,10 +530,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820"
sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
url: "https://pub.dev"
source: hosted
version: "2.3.8"
version: "3.0.1"
dartx:
dependency: "direct main"
description:
@@ -1104,14 +1080,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "11.0.0"
flutter_riverpod:
dependency: "direct main"
description:
name: flutter_riverpod
sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1"
url: "https://pub.dev"
source: hosted
version: "2.6.1"
flutter_rust_bridge:
dependency: "direct main"
description:
@@ -1202,14 +1170,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.0-dev.3"
freezed:
dependency: "direct dev"
description:
name: freezed
sha256: "6022db4c7bfa626841b2a10f34dd1e1b68e8f8f9650db6112dcdeeca45ca793c"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
freezed_annotation:
dependency: "direct main"
description:
name: freezed_annotation
sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2
sha256: c87ff004c8aa6af2d531668b46a4ea379f7191dc6dfa066acd53d506da6e044b
url: "https://pub.dev"
source: hosted
version: "2.4.4"
version: "3.0.0"
frontend_server_client:
dependency: transitive
description:
@@ -1567,10 +1543,10 @@ packages:
dependency: "direct dev"
description:
name: json_serializable
sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c
sha256: c50ef5fc083d5b5e12eef489503ba3bf5ccc899e487d691584699b4bdefeea8c
url: "https://pub.dev"
source: hosted
version: "6.9.0"
version: "6.9.5"
jwt_decode:
dependency: transitive
description:
@@ -2086,10 +2062,10 @@ packages:
dependency: transitive
description:
name: posix
sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a
sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62
url: "https://pub.dev"
source: hosted
version: "6.0.1"
version: "6.0.2"
postgrest:
dependency: transitive
description:
@@ -2306,38 +2282,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.2"
riverpod:
dependency: transitive
description:
name: riverpod
sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959"
url: "https://pub.dev"
source: hosted
version: "2.6.1"
riverpod_analyzer_utils:
dependency: transitive
description:
name: riverpod_analyzer_utils
sha256: c6b8222b2b483cb87ae77ad147d6408f400c64f060df7a225b127f4afef4f8c8
url: "https://pub.dev"
source: hosted
version: "0.5.8"
riverpod_annotation:
dependency: "direct main"
description:
name: riverpod_annotation
sha256: e14b0bf45b71326654e2705d462f21b958f987087be850afd60578fcd502d1b8
url: "https://pub.dev"
source: hosted
version: "2.6.1"
riverpod_generator:
dependency: "direct dev"
description:
name: riverpod_generator
sha256: "63546d70952015f0981361636bf8f356d9cfd9d7f6f0815e3c07789a41233188"
url: "https://pub.dev"
source: hosted
version: "2.6.3"
rxdart:
dependency: "direct main"
description:
@@ -2512,13 +2456,13 @@ packages:
source: hosted
version: "1.2.1"
source_gen:
dependency: transitive
dependency: "direct overridden"
description:
name: source_gen
sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832"
sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "2.0.0"
source_helper:
dependency: transitive
description:
@@ -2591,14 +2535,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.12.1"
state_notifier:
dependency: transitive
description:
name: state_notifier
sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb
url: "https://pub.dev"
source: hosted
version: "1.0.0"
storage_client:
dependency: transitive
description:
@@ -2899,10 +2835,10 @@ packages:
dependency: transitive
description:
name: video_player_avfoundation
sha256: "84b4752745eeccb6e75865c9aab39b3d28eb27ba5726d352d45db8297fbd75bc"
sha256: "9ee764e5cd2fc1e10911ae8ad588e1a19db3b6aa9a6eb53c127c42d3a3c3f22f"
url: "https://pub.dev"
source: hosted
version: "2.7.0"
version: "2.7.1"
video_player_media_kit:
dependency: "direct main"
description:
@@ -2952,21 +2888,21 @@ packages:
source: hosted
version: "3.3.3"
wakelock_plus:
dependency: transitive
dependency: "direct main"
description:
name: wakelock_plus
sha256: b90fbcc8d7bdf3b883ea9706d9d76b9978cb1dfa4351fcc8014d6ec31a493354
sha256: b6962cd9fc15e4843b573ba7b53bc46dd8a787594cf9ed5c5182581924656a58
url: "https://pub.dev"
source: hosted
version: "1.2.11"
version: "1.3.1"
wakelock_plus_platform_interface:
dependency: transitive
description:
name: wakelock_plus_platform_interface
sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a"
sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207
url: "https://pub.dev"
source: hosted
version: "1.2.2"
version: "1.2.3"
watcher:
dependency: transitive
description:
@@ -2995,18 +2931,18 @@ packages:
dependency: transitive
description:
name: web_socket
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
sha256: bfe6f435f6ec49cb6c01da1e275ae4228719e59a6b067048c51e72d9d63bcc4b
url: "https://pub.dev"
source: hosted
version: "0.1.6"
version: "1.0.0"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5"
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.3"
webdav_client:
dependency: "direct main"
description:

View File

@@ -81,7 +81,7 @@ dependencies:
image_picker_android: 0.8.12+22
video_player_media_kit: 1.0.6
video_player: 2.9.5
chewie: 1.11.1
chewie: 1.11.3
flutter_markdown: 0.7.7
image_picker_platform_interface: 2.10.1
flutter_image_compress: 2.4.0
@@ -113,10 +113,6 @@ dependencies:
photo_view: 0.15.0
dartx: 1.2.0
material_color_utilities: 0.11.1
flutter_riverpod: 2.6.1
riverpod_annotation: 2.6.1
freezed_annotation: 2.4.4
json_annotation: 4.9.0
audioplayers_android_exo: 0.1.2
scrollview_observer: 1.26.0
flutter_smart_dialog: 4.9.8+7
@@ -129,6 +125,9 @@ dependencies:
hive_ce: 2.10.1
hive_ce_flutter: 2.2.0
flutter_modular: 6.3.4
freezed_annotation: 3.0.0
json_annotation: 4.9.0
wakelock_plus: 1.3.1
dev_dependencies:
flutter_test:
@@ -137,11 +136,13 @@ dev_dependencies:
flutter_launcher_icons: 0.14.3
msix: 3.16.8
flutter_lints: 5.0.0
riverpod_generator: 2.6.3
json_serializable: 6.9.0
flutter_gen: 5.10.0
flutter_gen_runner: 5.10.0
freezed: 3.0.6
json_serializable: 6.9.5
dependency_overrides:
source_gen: 2.0.0
flutter_launcher_icons:

312
rust/Cargo.lock generated
View File

@@ -17,6 +17,12 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
[[package]]
name = "adler32"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
[[package]]
name = "aes"
version = "0.8.4"
@@ -28,6 +34,18 @@ dependencies = [
"cpufeatures",
]
[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy 0.7.35",
]
[[package]]
name = "aho-corasick"
version = "1.1.3"
@@ -54,6 +72,12 @@ dependencies = [
"backtrace",
]
[[package]]
name = "allocator-api2"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
name = "android_log-sys"
version = "0.3.2"
@@ -253,6 +277,15 @@ dependencies = [
"shlex",
]
[[package]]
name = "cedarwood"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d910bedd62c24733263d0bed247460853c9d22e8956bd4cd964302095e04e90"
dependencies = [
"smallvec",
]
[[package]]
name = "cfg-expr"
version = "0.15.8"
@@ -301,6 +334,15 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
[[package]]
name = "core2"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
dependencies = [
"memchr",
]
[[package]]
name = "cpufeatures"
version = "0.2.17"
@@ -375,6 +417,41 @@ dependencies = [
"typenum",
]
[[package]]
name = "darling"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn",
]
[[package]]
name = "darling_macro"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
"syn",
]
[[package]]
name = "dart-sys"
version = "4.1.5"
@@ -384,6 +461,12 @@ dependencies = [
"cc",
]
[[package]]
name = "dary_heap"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728"
[[package]]
name = "dashmap"
version = "4.0.2"
@@ -431,6 +514,37 @@ dependencies = [
"syn",
]
[[package]]
name = "derive_builder"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
dependencies = [
"derive_builder_macro",
]
[[package]]
name = "derive_builder_core"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "derive_builder_macro"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [
"derive_builder_core",
"syn",
]
[[package]]
name = "digest"
version = "0.10.7"
@@ -563,6 +677,12 @@ dependencies = [
"syn",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "futures"
version = "0.3.31"
@@ -652,6 +772,15 @@ dependencies = [
"slab",
]
[[package]]
name = "fxhash"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
dependencies = [
"byteorder",
]
[[package]]
name = "generic-array"
version = "0.14.7"
@@ -713,6 +842,16 @@ dependencies = [
"crunchy",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash",
"allocator-api2",
]
[[package]]
name = "hashbrown"
version = "0.15.2"
@@ -746,6 +885,12 @@ dependencies = [
"digest",
]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "image"
version = "0.25.6"
@@ -785,6 +930,29 @@ version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"
[[package]]
name = "include-flate"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df49c16750695486c1f34de05da5b7438096156466e7f76c38fcdf285cf0113e"
dependencies = [
"include-flate-codegen",
"lazy_static",
"libflate",
]
[[package]]
name = "include-flate-codegen"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c5b246c6261be723b85c61ecf87804e8ea4a35cb68be0ff282ed84b95ffe7d7"
dependencies = [
"libflate",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "indexmap"
version = "2.9.0"
@@ -792,7 +960,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
dependencies = [
"equivalent",
"hashbrown",
"hashbrown 0.15.2",
]
[[package]]
@@ -824,6 +992,32 @@ dependencies = [
"either",
]
[[package]]
name = "jieba-macros"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c676b32a471d3cfae8dac2ad2f8334cd52e53377733cca8c1fb0a5062fec192"
dependencies = [
"phf_codegen",
]
[[package]]
name = "jieba-rs"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d1bcad6332969e4d48ee568d430e14ee6dea70740c2549d005d87677ebefb0c"
dependencies = [
"cedarwood",
"derive_builder",
"fxhash",
"include-flate",
"jieba-macros",
"lazy_static",
"ordered-float",
"phf",
"regex",
]
[[package]]
name = "jobserver"
version = "0.1.33"
@@ -868,6 +1062,30 @@ version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]]
name = "libflate"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45d9dfdc14ea4ef0900c1cddbc8dcd553fbaacd8a4a282cf4018ae9dd04fb21e"
dependencies = [
"adler32",
"core2",
"crc32fast",
"dary_heap",
"libflate_lz77",
]
[[package]]
name = "libflate_lz77"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e0d73b369f386f1c44abd9c570d5318f55ccde816ff4b562fa452e5182863d"
dependencies = [
"core2",
"hashbrown 0.14.5",
"rle-decode-fast",
]
[[package]]
name = "libfuzzer-sys"
version = "0.4.9"
@@ -976,7 +1194,10 @@ dependencies = [
"fast_image_resize",
"flutter_rust_bridge",
"image",
"jieba-rs",
"once_cell",
"ring",
"tokio",
"ttf-parser",
"walkdir",
"zip",
@@ -1085,6 +1306,15 @@ version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "ordered-float"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
dependencies = [
"num-traits",
]
[[package]]
name = "oslog"
version = "0.1.0"
@@ -1112,6 +1342,44 @@ dependencies = [
"hmac",
]
[[package]]
name = "phf"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
"phf_shared",
]
[[package]]
name = "phf_codegen"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
dependencies = [
"phf_generator",
"phf_shared",
]
[[package]]
name = "phf_generator"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
"phf_shared",
"rand",
]
[[package]]
name = "phf_shared"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
dependencies = [
"siphasher",
]
[[package]]
name = "pin-project-lite"
version = "0.2.16"
@@ -1161,7 +1429,7 @@ version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
"zerocopy 0.8.24",
]
[[package]]
@@ -1371,6 +1639,12 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "rle-decode-fast"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
[[package]]
name = "rustc-demangle"
version = "0.1.24"
@@ -1453,6 +1727,12 @@ dependencies = [
"quote",
]
[[package]]
name = "siphasher"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]]
name = "slab"
version = "0.4.9"
@@ -1468,6 +1748,12 @@ version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "subtle"
version = "2.6.1"
@@ -1883,13 +2169,33 @@ dependencies = [
"lzma-sys",
]
[[package]]
name = "zerocopy"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
"zerocopy-derive 0.7.35",
]
[[package]]
name = "zerocopy"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
dependencies = [
"zerocopy-derive",
"zerocopy-derive 0.8.24",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]

View File

@@ -15,6 +15,9 @@ ttf-parser = { git = "https://github.com/ZhuJHua/ttf-parser", branch = "fvar" }
ring = "0.17.14"
zip = "2.6.1"
walkdir = "2.5.0"
jieba-rs = { version = "0.7.2", features = ["default-dict", "tfidf", "textrank"] }
once_cell = "1.21.3"
tokio = "1.44.2"
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(frb_expand)'] }

View File

@@ -16,7 +16,7 @@ use image::{
use super::constants::CompressFormat;
pub fn compress(
fn compress(
img: &DynamicImage,
dst_height: u32,
dst_width: u32,
@@ -84,7 +84,10 @@ impl ImageCompress {
max_height: Option<u32>,
quality: Option<u8>,
) -> Result<Vec<u8>> {
let src_img = Self::load_image(&file_path)?;
let src_img = ImageReader::open(file_path)?
.with_guessed_format()?
.decode()
.map_err(|e| anyhow::anyhow!("Failed to decode image: {}", e))?;
let compress_format = compress_format.unwrap_or(CompressFormat::Jpeg);
let quality = quality.unwrap_or(80);
@@ -137,13 +140,6 @@ impl ImageCompress {
(max_width, (img_height as f64 * ratio).round() as u32)
}
}
fn load_image(file_path: &str) -> Result<DynamicImage> {
ImageReader::open(file_path)?
.with_guessed_format()?
.decode()
.map_err(|e| anyhow::anyhow!("Failed to decode image: {}", e))
}
}
pub struct ResizeOptions {
pub target_width: Option<u32>,

126
rust/src/api/jieba.rs Normal file
View File

@@ -0,0 +1,126 @@
use anyhow::{Context, Ok, Result};
use flutter_rust_bridge::frb;
use jieba_rs::{Jieba, KeywordExtract, TextRank, TfIdf};
use once_cell::sync::OnceCell;
use std::collections::HashSet;
use std::sync::Arc;
use tokio::sync::OnceCell as AsyncOnceCell;
#[frb(opaque)]
pub struct JiebaRs {
inner: Jieba,
tfidf: OnceCell<TfIdf>,
text_rank: OnceCell<TextRank>,
}
#[derive(Debug, Clone)]
#[frb(opaque)]
pub struct Keyword {
pub keyword: String,
pub weight: f64,
}
static GLOBAL_JIEBA: AsyncOnceCell<Arc<JiebaRs>> = AsyncOnceCell::const_new();
#[frb(init)]
pub async fn init_jieba() {
JiebaRs::init_global().await;
}
impl JiebaRs {
fn new() -> Self {
Self {
inner: Jieba::new(),
tfidf: OnceCell::new(),
text_rank: OnceCell::new(),
}
}
async fn init_global() {
GLOBAL_JIEBA
.get_or_init(|| async {
let instance = JiebaRs::new();
Arc::new(instance)
})
.await;
}
fn get_instance() -> Result<Arc<JiebaRs>> {
GLOBAL_JIEBA
.get()
.cloned()
.context("JiebaRs is not initialized. Please call init_global() first.")
}
pub fn cut(text: String, hmm: bool) -> Result<Vec<String>> {
let jieba = Self::get_instance()?;
Ok(jieba
.inner
.cut(&text, hmm)
.iter()
.map(|s| s.to_string())
.collect())
}
pub fn cut_all(text: String) -> Result<Vec<String>> {
let jieba = Self::get_instance()?;
let result: HashSet<String> = jieba
.inner
.cut_all(&text)
.iter()
.map(|s| s.to_string())
.collect();
Ok(result.into_iter().collect())
}
pub fn cut_for_search(text: String, hmm: bool) -> Result<Vec<String>> {
let jieba = Self::get_instance()?;
let result: HashSet<String> = jieba
.inner
.cut_for_search(&text, hmm)
.iter()
.map(|s| s.to_string())
.collect();
Ok(result.into_iter().collect())
}
pub fn extract_keywords_tfidf(
text: String,
top_k: usize,
allowed_pos: Vec<String>,
) -> Result<Vec<Keyword>> {
let jieba = Self::get_instance()?;
let tfidf = jieba
.tfidf
.get_or_try_init(|| Ok(TfIdf::default()))
.context("Failed to initialize TF-IDF")?;
let keywords = tfidf.extract_keywords(&jieba.inner, &text, top_k, allowed_pos);
Ok(Self::convert_keywords(keywords))
}
pub fn extract_keywords_text_rank(
text: String,
top_k: usize,
allowed_pos: Vec<String>,
) -> Result<Vec<Keyword>> {
let jieba = Self::get_instance()?;
let text_rank = jieba
.text_rank
.get_or_try_init(|| Ok(TextRank::default()))
.context("Failed to initialize TextRank")?;
let keywords = text_rank.extract_keywords(&jieba.inner, &text, top_k, allowed_pos);
Ok(Self::convert_keywords(keywords))
}
fn convert_keywords(keywords: Vec<jieba_rs::Keyword>) -> Vec<Keyword> {
keywords
.into_iter()
.map(|k| Keyword {
keyword: k.keyword,
weight: k.weight,
})
.collect()
}
}

View File

@@ -3,4 +3,5 @@ pub mod constants;
pub mod kmp;
pub mod font;
pub mod aes;
pub mod zip;
pub mod zip;
pub mod jieba;

File diff suppressed because it is too large Load Diff