From c14de9c3e91e9c3c6b04a5fa631cb534a092b8a1 Mon Sep 17 00:00:00 2001 From: randogoth Date: Sun, 7 Jun 2026 16:18:52 +0300 Subject: [PATCH] binary file r/w --- lib/src/file_actor.dart | 21 +++++++++++++++++++++ test/file_actor_test.dart | 17 +++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/lib/src/file_actor.dart b/lib/src/file_actor.dart index fa1ebcf..f8cee5a 100644 --- a/lib/src/file_actor.dart +++ b/lib/src/file_actor.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:typed_data'; import 'package:actors/actors.dart'; sealed class FileMessage { @@ -16,6 +17,17 @@ final class SaveFile extends FileMessage { const SaveFile(this.path, this.content); } +final class LoadBinaryFile extends FileMessage { + final String path; + const LoadBinaryFile(this.path); +} + +final class SaveBinaryFile extends FileMessage { + final String path; + final Uint8List bytes; + const SaveBinaryFile(this.path, this.bytes); +} + sealed class FileResult { const FileResult(); } @@ -29,11 +41,20 @@ final class FileSaved extends FileResult { const FileSaved(); } +final class BinaryFileLoaded extends FileResult { + final Uint8List bytes; + const BinaryFileLoaded(this.bytes); +} + class FileActor with Handler { @override Future handle(FileMessage message) => switch (message) { LoadFile(:final path) => File(path).readAsString().then(FileLoaded.new), SaveFile(:final path, :final content) => File(path).writeAsString(content).then((_) => const FileSaved()), + LoadBinaryFile(:final path) => + File(path).readAsBytes().then(BinaryFileLoaded.new), + SaveBinaryFile(:final path, :final bytes) => + File(path).writeAsBytes(bytes).then((_) => const FileSaved()), }; } diff --git a/test/file_actor_test.dart b/test/file_actor_test.dart index ef2f6f5..a417d29 100644 --- a/test/file_actor_test.dart +++ b/test/file_actor_test.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:typed_data'; import 'package:actors/actors.dart'; import 'package:swarm/swarm.dart'; import 'package:test/test.dart'; @@ -38,5 +39,21 @@ void main() { throwsA(isA()), ); }); + + test('saves binary file', () async { + final path = '${tempDir.path}/data.bin'; + final bytes = Uint8List.fromList([0x00, 0xFF, 0x89, 0x50, 0x4E, 0x47]); + final result = await actor.send(SaveBinaryFile(path, bytes)); + expect(result, isA()); + }); + + test('loads a saved binary file', () async { + final path = '${tempDir.path}/data.bin'; + final bytes = Uint8List.fromList([0x00, 0xFF, 0x89, 0x50, 0x4E, 0x47]); + await actor.send(SaveBinaryFile(path, bytes)); + final result = await actor.send(LoadBinaryFile(path)); + expect(result, isA()); + expect((result as BinaryFileLoaded).bytes, equals(bytes)); + }); }); }