refactir(gui): added flutter version with flutter_rust_bridge

This commit is contained in:
Patryk Hegenberg 2024-05-16 20:25:21 +02:00
parent f1e48f6d12
commit fbb181d95b
200 changed files with 11018 additions and 84 deletions

View file

@ -0,0 +1,124 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter_test_gui/pages/settings_screen.dart';
import 'package:flutter_test_gui/pages/send_screen.dart';
import 'package:flutter_test_gui/pages/receive_screen.dart';
Future<void> main() async {
await RustLib.init();
runApp(const MyApp());
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
doWhenWindowReady(() {
final win = appWindow;
const initialSize = Size(720, 512);
win.minSize = initialSize;
win.size = initialSize;
win.alignment = Alignment.center;
win.title = 'Caesar Test Demo';
win.show();
});
}
}
const backColor = Color(0xFF32363E);
const highlightColor = Color(0xFF98C379);
const textColor = Color(0xFFABB2BF);
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Caesar-Transfer',
theme: ThemeData(
useMaterial3: true,
),
home: const MyHomePage(title: 'Caesar-Transfer'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<Widget> _screens = [
SendScreen(),
ReceiveScreen(),
];
int _selectedIndex = 0;
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
backgroundColor: backColor,
appBar: AppBar(
backgroundColor: const Color(0xFF282C34),
centerTitle: true,
title: Text(
widget.title,
style: TextStyle(color: textColor),
),
actions: [
PopupMenuButton<String>(
onSelected: (String result) {
if (result == 'Settings') {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SettingsScreen()),
);
}
},
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'Settings',
child: Text('Settings'),
)
],
),
],
),
body: _screens[_selectedIndex],
bottomNavigationBar: BottomNavigationBar(
backgroundColor: const Color(0xFF282C34),
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.send),
label: 'Send',
),
BottomNavigationBarItem(
icon: Icon(Icons.download),
label: 'Receive',
),
],
currentIndex: _selectedIndex,
selectedItemColor: highlightColor,
unselectedItemColor: textColor,
onTap: _onItemTapped,
),
),
);
}
}

View file

@ -0,0 +1,163 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_test_gui/src/rust/api/simple.dart';
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
const backColor = Color(0xFF32363E);
const highlightColor = Color(0xFF98C379);
const textColor = Color(0xFFABB2BF);
class ReceiveScreen extends StatefulWidget {
@override
_ReceiveScreenState createState() => _ReceiveScreenState();
}
class _ReceiveScreenState extends State<ReceiveScreen> {
String appOrigin = '';
final myController = TextEditingController();
String greetingText = '';
bool _showScanner = false;
Widget _buildQRScanner() {
if (Platform.isIOS || Platform.isAndroid) {
return MobileScanner(
controller: MobileScannerController(
detectionSpeed: DetectionSpeed.noDuplicates),
onDetect: (barcode) {
if (barcode.raw == null) {
debugPrint('Failed to scan qr code');
} else {
final String code = barcode.raw.toString();
setState(() {
greetingText = code;
_showScanner = false;
});
}
},
);
} else {
_showScanner = false;
return const SizedBox.shrink();
}
}
Future<void> loadSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
appOrigin = prefs.getString('app_origin') ??
'wss://caesar-transfer-iu.shuttleapp.rs'; // Laden Sie die app_origin
}
Future<void> _startTransfer(String appOrigin) async {
final transferName = myController.text.trim();
if (transferName.isNotEmpty) {
try {
final outcome = await startRustReceiver(
transfername: transferName, relay: appOrigin);
print('Receiver erfolgreich gestartet ');
print('Ergebnis von Rust: $outcome');
} catch (e) {
print('Fehler beim Starten des Receivers: $e');
}
}
print("Transfer startet with app_origin: $appOrigin");
}
// Future<void> _startTransfer(String appOrigin) async {
// final transferName = myController.text.trim();
// if (transferName.isNotEmpty) {
// final outcome =
// startRustReceiver(transfername: transferName, relay: appOrigin);
// }
// print("Transfer startet with app_origin: $appOrigin");
// }
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: backColor,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (!_showScanner)
GestureDetector(
onTap: () {
setState(() {
_showScanner = true;
});
},
child: Container(
width: 200,
height: 200,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: textColor,
),
child: const Center(
child: Icon(
Icons.qr_code,
color: highlightColor,
size: 100,
),
),
),
),
if (_showScanner)
Container(
width: MediaQuery.of(context).size.width * 0.8,
height: MediaQuery.of(context).size.height * 0.5,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
child: _buildQRScanner(),
),
const SizedBox(height: 32),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: SizedBox(
width: MediaQuery.of(context).size.width * 0.5,
child: TextField(
controller: myController,
textAlign: TextAlign.center,
style: const TextStyle(
color: highlightColor,
),
decoration: const InputDecoration(
labelText: 'Enter Transfername',
labelStyle: TextStyle(color: Colors.white54),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
),
),
),
),
),
const SizedBox(height: 16),
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: textColor,
foregroundColor: highlightColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
),
onPressed: () {
loadSettings().then((_) => _startTransfer(appOrigin));
},
child: const Text('Receive'),
),
Text(
greetingText,
style: const TextStyle(color: Colors.white),
),
],
)),
);
}
}

View file

@ -0,0 +1,133 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:desktop_drop/desktop_drop.dart';
import 'package:cross_file/cross_file.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_test_gui/pages/waiting_screen.dart';
import 'package:flutter_test_gui/src/rust/api/simple.dart';
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
const backColor = Color(0xFF32363E);
const highlightColor = Color(0xFF98C379);
const textColor = Color(0xFFABB2BF);
class SendScreen extends StatefulWidget {
@override
_SendScreenState createState() => _SendScreenState();
}
class _SendScreenState extends State<SendScreen> {
final List<XFile> _list = [];
String transferName = '';
bool _dragging = false;
Future<void> openFilePicker() async {
FilePickerResult? result = await FilePicker.platform.pickFiles(
allowMultiple: true, // Erlaube die Auswahl mehrerer Dateien
);
if (result != null) {
_list.addAll(result.xFiles);
}
}
Future<void> _startTransfer() async {
final randomName = generateRandomName(); // Rust-Funktion aufrufen
print('Zusammengefügter Text: $randomName');
setState(() {
transferName = randomName;
});
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
WaitingScreen(transferName: transferName, files: _list)));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: backColor,
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Stack(
children: [
GestureDetector(
onTap: openFilePicker,
child: DropTarget(
onDragDone: (detail) {
setState(() {
_list.addAll(detail.files);
});
},
onDragEntered: (detail) {
setState(() {
_dragging = true;
});
},
onDragExited: (detail) {
setState(() {
_dragging = false;
});
},
child: Column(
children: [
Container(
height: 200,
width: 200,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _dragging
? Colors.blue.withOpacity(0.4)
: textColor),
child: _list.isEmpty
? const Center(
child: Icon(
Icons.add_circle_outlined,
color: highlightColor,
size: 200,
),
)
: Text(_list.join("\n")),
),
const SizedBox(height: 16),
if (_list.isNotEmpty)
SizedBox(
height: 100,
child: ListView.builder(
itemCount: _list.length,
itemBuilder: (context, index) {
return Text(
_list[index].name,
style: const TextStyle(color: Colors.white),
);
},
),
)
],
),
),
),
],
),
),
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: textColor,
foregroundColor: highlightColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
),
onPressed: () {
_startTransfer();
},
child: const Text("Send"),
),
],
),
);
}
}

View file

@ -0,0 +1,102 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SettingsScreen extends StatefulWidget {
@override
_SettingsScreenState createState() => _SettingsScreenState();
}
class _SettingsScreenState extends State<SettingsScreen> {
final TextEditingController _appEnvironmentController =
TextEditingController();
final TextEditingController _appHostController = TextEditingController();
final TextEditingController _appPortController = TextEditingController();
final TextEditingController _appOriginController = TextEditingController();
final TextEditingController _appRelayController = TextEditingController();
@override
void initState() {
super.initState();
loadSettings();
}
Future<void> loadSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String appEnvironment = prefs.getString('app_environment') ?? '';
String appHost = prefs.getString('app_host') ?? '';
String appPort = prefs.getString('app_port') ?? '';
String appOrigin = prefs.getString('app_origin') ?? '';
String appRelay = prefs.getString('app_relay') ?? '';
// Setzen Sie die Controller-Texte nach dem Laden der Einstellungen
setState(() {
_appEnvironmentController.text = appEnvironment;
_appHostController.text = appHost;
_appPortController.text = appPort;
_appOriginController.text = appOrigin;
_appRelayController.text = appRelay;
});
}
// Future<void> loadSettings() async {
// SharedPreferences prefs = await SharedPreferences.getInstance();
// setState(() {
// _appEnvironmentController.text = prefs.getString('app_environment') ?? '';
// _appHostController.text = prefs.getString('app_host') ?? '';
// _appPortController.text = prefs.getString('app_port') ?? '';
// _appOriginController.text = prefs.getString('app_origin') ?? '';
// _appRelayController.text = prefs.getString('app_relay') ?? '';
// });
// }
Future<void> saveSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('app_environment', _appEnvironmentController.text);
await prefs.setString('app_host', _appHostController.text);
await prefs.setString('app_port', _appPortController.text);
await prefs.setString('app_origin', _appOriginController.text);
await prefs.setString('app_relay', _appRelayController.text);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Settings'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _appEnvironmentController,
decoration: InputDecoration(labelText: 'App Environment'),
),
TextField(
controller: _appHostController,
decoration: InputDecoration(labelText: 'App Host'),
),
TextField(
controller: _appPortController,
decoration: InputDecoration(labelText: 'App Port'),
),
TextField(
controller: _appOriginController,
decoration: InputDecoration(labelText: 'App Origin'),
),
TextField(
controller: _appRelayController,
decoration: InputDecoration(labelText: 'App Relay'),
),
ElevatedButton(
onPressed: () async {
await saveSettings();
Navigator.pop(context);
},
child: Text('Save'),
),
],
),
),
);
}
}

View file

@ -0,0 +1,75 @@
import 'package:flutter/material.dart';
import 'package:flutter_test_gui/pages/send_screen.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:cross_file/cross_file.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_test_gui/src/rust/api/simple.dart';
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
const backColor = Color(0xFF32363E);
const highlightColor = Color(0xFF98C379);
const textColor = Color(0xFFABB2BF);
class WaitingScreen extends StatefulWidget {
final List<XFile> files;
final String transferName;
const WaitingScreen(
{Key? key, required this.transferName, required this.files})
: super(key: key);
@override
_WaitingScreenState createState() => _WaitingScreenState();
}
class _WaitingScreenState extends State<WaitingScreen> {
String appOrigin = '';
@override
void initState() {
super.initState();
loadSettings().then((_) => callStartSender(appOrigin));
}
Future<void> loadSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
appOrigin = prefs.getString('app_origin') ??
'wss://caesar-transfer-iu.shuttleapp.rs'; // Laden Sie die app_origin
}
Future<void> callStartSender(String appOrigin) async {
_startTransfer(appOrigin);
}
Future<void> _startTransfer(String appOrigin) async {
List<String> fileNames = widget.files.map((file) => file.path).toList();
final outcome = await startRustSender(
name: widget.transferName, relay: appOrigin, files: fileNames);
Navigator.push(
context, MaterialPageRoute(builder: (context) => SendScreen()));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: backColor,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
widget.transferName,
style: const TextStyle(color: Colors.white, fontSize: 24),
),
const SizedBox(height: 32),
QrImageView(
data: widget.transferName,
version: QrVersions.auto,
size: 200,
foregroundColor: highlightColor,
),
],
),
),
);
}
}

View file

@ -0,0 +1,23 @@
// This file is automatically generated, so please do not edit it.
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
// 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';
String generateRandomName({dynamic hint}) =>
RustLib.instance.api.generateRandomName(hint: hint);
Future<void> startRustSender(
{required String name,
required String relay,
required List<String> files,
dynamic hint}) =>
RustLib.instance.api
.startRustSender(name: name, relay: relay, files: files, hint: hint);
Future<String> startRustReceiver(
{required String relay, required String transfername, dynamic hint}) =>
RustLib.instance.api.startRustReceiver(
relay: relay, transfername: transfername, hint: hint);

View file

@ -0,0 +1,341 @@
// This file is automatically generated, so please do not edit it.
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'api/simple.dart';
import 'dart:async';
import 'dart:convert';
import 'frb_generated.io.dart' if (dart.library.html) 'frb_generated.web.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
/// Main entrypoint of the Rust API
class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
@internal
static final instance = RustLib._();
RustLib._();
/// Initialize flutter_rust_bridge
static Future<void> init({
RustLibApi? api,
BaseHandler? handler,
ExternalLibrary? externalLibrary,
}) async {
await instance.initImpl(
api: api,
handler: handler,
externalLibrary: externalLibrary,
);
}
/// Dispose flutter_rust_bridge
///
/// The call to this function is optional, since flutter_rust_bridge (and everything else)
/// is automatically disposed when the app stops.
static void dispose() => instance.disposeImpl();
@override
ApiImplConstructor<RustLibApiImpl, RustLibWire> get apiImplConstructor =>
RustLibApiImpl.new;
@override
WireConstructor<RustLibWire> get wireConstructor =>
RustLibWire.fromExternalLibrary;
@override
Future<void> executeRustInitializers() async {
await api.initApp();
}
@override
ExternalLibraryLoaderConfig get defaultExternalLibraryLoaderConfig =>
kDefaultExternalLibraryLoaderConfig;
@override
String get codegenVersion => '2.0.0-dev.33';
@override
int get rustContentHash => 2067418172;
static const kDefaultExternalLibraryLoaderConfig =
ExternalLibraryLoaderConfig(
stem: 'rust_lib_flutter_test_gui',
ioDirectory: '../flutter_test_lib/target/release/',
webPrefix: 'pkg/',
);
}
abstract class RustLibApi extends BaseApi {
String generateRandomName({dynamic hint});
Future<void> initApp({dynamic hint});
Future<String> startRustReceiver(
{required String relay, required String transfername, dynamic hint});
Future<void> startRustSender(
{required String name,
required String relay,
required List<String> files,
dynamic hint});
}
class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
RustLibApiImpl({
required super.handler,
required super.wire,
required super.generalizedFrbRustBinding,
required super.portManager,
});
@override
String generateRandomName({dynamic hint}) {
return handler.executeSync(SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
decodeErrorData: null,
),
constMeta: kGenerateRandomNameConstMeta,
argValues: [],
apiImpl: this,
hint: hint,
));
}
TaskConstMeta get kGenerateRandomNameConstMeta => const TaskConstMeta(
debugName: "generate_random_name",
argNames: [],
);
@override
Future<void> initApp({dynamic hint}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 1, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kInitAppConstMeta,
argValues: [],
apiImpl: this,
hint: hint,
));
}
TaskConstMeta get kInitAppConstMeta => const TaskConstMeta(
debugName: "init_app",
argNames: [],
);
@override
Future<String> startRustReceiver(
{required String relay, required String transfername, dynamic hint}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(relay, serializer);
sse_encode_String(transfername, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 4, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
decodeErrorData: sse_decode_AnyhowException,
),
constMeta: kStartRustReceiverConstMeta,
argValues: [relay, transfername],
apiImpl: this,
hint: hint,
));
}
TaskConstMeta get kStartRustReceiverConstMeta => const TaskConstMeta(
debugName: "start_rust_receiver",
argNames: ["relay", "transfername"],
);
@override
Future<void> startRustSender(
{required String name,
required String relay,
required List<String> files,
dynamic hint}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(name, serializer);
sse_encode_String(relay, serializer);
sse_encode_list_String(files, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 3, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: sse_decode_AnyhowException,
),
constMeta: kStartRustSenderConstMeta,
argValues: [name, relay, files],
apiImpl: this,
hint: hint,
));
}
TaskConstMeta get kStartRustSenderConstMeta => const TaskConstMeta(
debugName: "start_rust_sender",
argNames: ["name", "relay", "files"],
);
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return AnyhowException(raw as String);
}
@protected
String dco_decode_String(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return raw as String;
}
@protected
List<String> dco_decode_list_String(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return (raw as List<dynamic>).map(dco_decode_String).toList();
}
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return raw as Uint8List;
}
@protected
int dco_decode_u_8(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return raw as int;
}
@protected
void dco_decode_unit(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return;
}
@protected
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_String(deserializer);
return AnyhowException(inner);
}
@protected
String sse_decode_String(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_list_prim_u_8_strict(deserializer);
return utf8.decoder.convert(inner);
}
@protected
List<String> sse_decode_list_String(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var len_ = sse_decode_i_32(deserializer);
var ans_ = <String>[];
for (var idx_ = 0; idx_ < len_; ++idx_) {
ans_.add(sse_decode_String(deserializer));
}
return ans_;
}
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var len_ = sse_decode_i_32(deserializer);
return deserializer.buffer.getUint8List(len_);
}
@protected
int sse_decode_u_8(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return deserializer.buffer.getUint8();
}
@protected
void sse_decode_unit(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
}
@protected
int sse_decode_i_32(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return deserializer.buffer.getInt32();
}
@protected
bool sse_decode_bool(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return deserializer.buffer.getUint8() != 0;
}
@protected
void sse_encode_AnyhowException(
AnyhowException self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
throw UnimplementedError('Unreachable ()');
}
@protected
void sse_encode_String(String self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer);
}
@protected
void sse_encode_list_String(List<String> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
for (final item in self) {
sse_encode_String(item, serializer);
}
}
@protected
void sse_encode_list_prim_u_8_strict(
Uint8List self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
serializer.buffer.putUint8List(self);
}
@protected
void sse_encode_u_8(int self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
serializer.buffer.putUint8(self);
}
@protected
void sse_encode_unit(void self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
}
@protected
void sse_encode_i_32(int self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
serializer.buffer.putInt32(self);
}
@protected
void sse_encode_bool(bool self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
serializer.buffer.putUint8(self ? 1 : 0);
}
}

View file

@ -0,0 +1,103 @@
// This file is automatically generated, so please do not edit it.
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'api/simple.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({
required super.handler,
required super.wire,
required super.generalizedFrbRustBinding,
required super.portManager,
});
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw);
@protected
String dco_decode_String(dynamic raw);
@protected
List<String> dco_decode_list_String(dynamic raw);
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
int dco_decode_u_8(dynamic raw);
@protected
void dco_decode_unit(dynamic raw);
@protected
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer);
@protected
String sse_decode_String(SseDeserializer deserializer);
@protected
List<String> sse_decode_list_String(SseDeserializer deserializer);
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
int sse_decode_u_8(SseDeserializer deserializer);
@protected
void sse_decode_unit(SseDeserializer deserializer);
@protected
int sse_decode_i_32(SseDeserializer deserializer);
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
void sse_encode_AnyhowException(
AnyhowException self, SseSerializer serializer);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@protected
void sse_encode_list_String(List<String> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_8_strict(
Uint8List 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_i_32(int self, SseSerializer serializer);
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
}
// Section: wire_class
class RustLibWire implements BaseWire {
factory RustLibWire.fromExternalLibrary(ExternalLibrary lib) =>
RustLibWire(lib.ffiDynamicLibrary);
/// Holds the symbol lookup function.
final ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
_lookup;
/// The symbols are looked up in [dynamicLibrary].
RustLibWire(ffi.DynamicLibrary dynamicLibrary)
: _lookup = dynamicLibrary.lookup;
}

View file

@ -0,0 +1,106 @@
// This file is automatically generated, so please do not edit it.
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'api/simple.dart';
import 'dart:async';
import 'dart:convert';
import 'frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart';
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
RustLibApiImplPlatform({
required super.handler,
required super.wire,
required super.generalizedFrbRustBinding,
required super.portManager,
});
@protected
AnyhowException dco_decode_AnyhowException(dynamic raw);
@protected
String dco_decode_String(dynamic raw);
@protected
List<String> dco_decode_list_String(dynamic raw);
@protected
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
@protected
int dco_decode_u_8(dynamic raw);
@protected
void dco_decode_unit(dynamic raw);
@protected
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer);
@protected
String sse_decode_String(SseDeserializer deserializer);
@protected
List<String> sse_decode_list_String(SseDeserializer deserializer);
@protected
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
@protected
int sse_decode_u_8(SseDeserializer deserializer);
@protected
void sse_decode_unit(SseDeserializer deserializer);
@protected
int sse_decode_i_32(SseDeserializer deserializer);
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
void sse_encode_AnyhowException(
AnyhowException self, SseSerializer serializer);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@protected
void sse_encode_list_String(List<String> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_8_strict(
Uint8List 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_i_32(int self, SseSerializer serializer);
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
}
// Section: wire_class
class RustLibWire implements BaseWire {
RustLibWire.fromExternalLibrary(ExternalLibrary lib);
}
@JS('wasm_bindgen')
external RustLibWasmModule get wasmModule;
@JS()
@anonymous
class RustLibWasmModule implements WasmModule {
@override
external Object /* Promise */ call([String? moduleName]);
@override
external RustLibWasmModule bind(dynamic thisArg, String moduleName);
}