diff --git a/lib/main.dart b/lib/main.dart index 4e9b2b2f..6506b348 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -133,7 +133,7 @@ Future main(List rawArgs) async { repository: null, version: "0.1.0", ); - final sender = SpotubePlugin.newContext( + final sender = plugin.createContext( pluginScript: pluginJS, pluginConfig: config, ); diff --git a/lib/src/rust/api/plugin/models/auth.dart b/lib/src/rust/api/plugin/models/auth.dart new file mode 100644 index 00000000..308e9fde --- /dev/null +++ b/lib/src/rust/api/plugin/models/auth.dart @@ -0,0 +1,34 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +// 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 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`, `clone`, `clone`, `cmp`, `eq`, `fmt`, `fmt`, `partial_cmp` + +class AuthEventObject { + final AuthEventType eventType; + + const AuthEventObject({ + required this.eventType, + }); + + @override + int get hashCode => eventType.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is AuthEventObject && + runtimeType == other.runtimeType && + eventType == other.eventType; +} + +enum AuthEventType { + login, + refreshSession, + logout, + ; +} diff --git a/lib/src/rust/api/plugin/plugin.dart b/lib/src/rust/api/plugin/plugin.dart index c18bef0e..72a2b59b 100644 --- a/lib/src/rust/api/plugin/plugin.dart +++ b/lib/src/rust/api/plugin/plugin.dart @@ -5,11 +5,12 @@ import '../../frb_generated.dart'; import '../../lib.dart'; +import 'models/auth.dart'; import 'models/core.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; import 'senders.dart'; -// These functions are ignored because they are not marked as `pub`: `console_log`, `js_executor_thread`, `register_globals`, `set_timeout` +// These functions are ignored because they are not marked as `pub`: `create_context`, `js_executor_thread` // 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> @@ -19,69 +20,56 @@ abstract class OpaqueSender implements RustOpaqueInterface { set sender(SenderPluginCommand sender); } -class SpotubePlugin { - final PluginArtistSender artist; - final PluginAlbumSender album; - final PluginAudioSourceSender audioSource; - final PluginAuthSender auth; - final PluginBrowseSender browse; - final PluginCoreSender core; - final PluginPlaylistSender playlist; - final PluginSearchSender search; - final PluginTrackSender track; - final PluginUserSender user; +// Rust type: RustOpaqueMoi> +abstract class SpotubePlugin implements RustOpaqueInterface { + Stream authState(); - const SpotubePlugin.raw({ - required this.artist, - required this.album, - required this.audioSource, - required this.auth, - required this.browse, - required this.core, - required this.playlist, - required this.search, - required this.track, - required this.user, - }); + PluginAlbumSender get album; - Future dispose({required OpaqueSender tx}) => RustLib.instance.api - .crateApiPluginPluginSpotubePluginDispose(that: this, tx: tx); + PluginArtistSender get artist; + + PluginAudioSourceSender get audioSource; + + PluginAuthSender get auth; + + PluginBrowseSender get browse; + + PluginCoreSender get core; + + PluginPlaylistSender get playlist; + + PluginSearchSender get search; + + PluginTrackSender get track; + + PluginUserSender get user; + + set album(PluginAlbumSender album); + + set artist(PluginArtistSender artist); + + set audioSource(PluginAudioSourceSender audioSource); + + set auth(PluginAuthSender auth); + + set browse(PluginBrowseSender browse); + + set core(PluginCoreSender core); + + set playlist(PluginPlaylistSender playlist); + + set search(PluginSearchSender search); + + set track(PluginTrackSender track); + + set user(PluginUserSender user); + + Future close({required OpaqueSender tx}); + + Future createContext( + {required String pluginScript, + required PluginConfiguration pluginConfig}); factory SpotubePlugin() => RustLib.instance.api.crateApiPluginPluginSpotubePluginNew(); - - static OpaqueSender newContext( - {required String pluginScript, - required PluginConfiguration pluginConfig}) => - RustLib.instance.api.crateApiPluginPluginSpotubePluginNewContext( - pluginScript: pluginScript, pluginConfig: pluginConfig); - - @override - int get hashCode => - artist.hashCode ^ - album.hashCode ^ - audioSource.hashCode ^ - auth.hashCode ^ - browse.hashCode ^ - core.hashCode ^ - playlist.hashCode ^ - search.hashCode ^ - track.hashCode ^ - user.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is SpotubePlugin && - runtimeType == other.runtimeType && - artist == other.artist && - album == other.album && - audioSource == other.audioSource && - auth == other.auth && - browse == other.browse && - core == other.core && - playlist == other.playlist && - search == other.search && - track == other.track && - user == other.user; } diff --git a/lib/src/rust/api/plugin/senders.dart b/lib/src/rust/api/plugin/senders.dart index d54de212..501b46a5 100644 --- a/lib/src/rust/api/plugin/senders.dart +++ b/lib/src/rust/api/plugin/senders.dart @@ -18,6 +18,7 @@ import 'models/user.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; import 'plugin.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): `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt` // These functions are ignored (category: IgnoreBecauseExplicitAttribute): `new`, `new`, `new`, `new`, `new`, `new`, `new`, `new`, `new`, `new` class PluginAlbumSender { diff --git a/lib/src/rust/frb_generated.dart b/lib/src/rust/frb_generated.dart index 8fd49a36..cdb58c64 100644 --- a/lib/src/rust/frb_generated.dart +++ b/lib/src/rust/frb_generated.dart @@ -7,6 +7,7 @@ import 'api/plugin/commands.dart'; import 'api/plugin/models/album.dart'; import 'api/plugin/models/artist.dart'; import 'api/plugin/models/audio_source.dart'; +import 'api/plugin/models/auth.dart'; import 'api/plugin/models/browse.dart'; import 'api/plugin/models/core.dart'; import 'api/plugin/models/image.dart'; @@ -84,7 +85,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.11.1'; @override - int get rustContentHash => -836755871; + int get rustContentHash => 1716120288; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( @@ -101,6 +102,81 @@ abstract class RustLibApi extends BaseApi { void crateApiPluginPluginOpaqueSenderAutoAccessorSetSender( {required OpaqueSender that, required SenderPluginCommand sender}); + Stream crateApiPluginPluginSpotubePluginAuthState( + {required SpotubePlugin that}); + + PluginAlbumSender crateApiPluginPluginSpotubePluginAutoAccessorGetAlbum( + {required SpotubePlugin that}); + + PluginArtistSender crateApiPluginPluginSpotubePluginAutoAccessorGetArtist( + {required SpotubePlugin that}); + + PluginAudioSourceSender + crateApiPluginPluginSpotubePluginAutoAccessorGetAudioSource( + {required SpotubePlugin that}); + + PluginAuthSender crateApiPluginPluginSpotubePluginAutoAccessorGetAuth( + {required SpotubePlugin that}); + + PluginBrowseSender crateApiPluginPluginSpotubePluginAutoAccessorGetBrowse( + {required SpotubePlugin that}); + + PluginCoreSender crateApiPluginPluginSpotubePluginAutoAccessorGetCore( + {required SpotubePlugin that}); + + PluginPlaylistSender crateApiPluginPluginSpotubePluginAutoAccessorGetPlaylist( + {required SpotubePlugin that}); + + PluginSearchSender crateApiPluginPluginSpotubePluginAutoAccessorGetSearch( + {required SpotubePlugin that}); + + PluginTrackSender crateApiPluginPluginSpotubePluginAutoAccessorGetTrack( + {required SpotubePlugin that}); + + PluginUserSender crateApiPluginPluginSpotubePluginAutoAccessorGetUser( + {required SpotubePlugin that}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetAlbum( + {required SpotubePlugin that, required PluginAlbumSender album}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetArtist( + {required SpotubePlugin that, required PluginArtistSender artist}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetAudioSource( + {required SpotubePlugin that, + required PluginAudioSourceSender audioSource}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetAuth( + {required SpotubePlugin that, required PluginAuthSender auth}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetBrowse( + {required SpotubePlugin that, required PluginBrowseSender browse}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetCore( + {required SpotubePlugin that, required PluginCoreSender core}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetPlaylist( + {required SpotubePlugin that, required PluginPlaylistSender playlist}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetSearch( + {required SpotubePlugin that, required PluginSearchSender search}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetTrack( + {required SpotubePlugin that, required PluginTrackSender track}); + + void crateApiPluginPluginSpotubePluginAutoAccessorSetUser( + {required SpotubePlugin that, required PluginUserSender user}); + + Future crateApiPluginPluginSpotubePluginClose( + {required SpotubePlugin that, required OpaqueSender tx}); + + Future crateApiPluginPluginSpotubePluginCreateContext( + {required SpotubePlugin that, + required String pluginScript, + required PluginConfiguration pluginConfig}); + + SpotubePlugin crateApiPluginPluginSpotubePluginNew(); + Future crateApiInitApp(); Future crateApiPluginSendersPluginAlbumSenderGetAlbum( @@ -391,15 +467,6 @@ abstract class RustLibApi extends BaseApi { crateApiPluginModelsAudioSourceSpotubeAudioSourceContainerPresetFileExtension( {required SpotubeAudioSourceContainerPreset that}); - Future crateApiPluginPluginSpotubePluginDispose( - {required SpotubePlugin that, required OpaqueSender tx}); - - SpotubePlugin crateApiPluginPluginSpotubePluginNew(); - - OpaqueSender crateApiPluginPluginSpotubePluginNewContext( - {required String pluginScript, - required PluginConfiguration pluginConfig}); - RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_OpaqueSender; @@ -425,6 +492,15 @@ abstract class RustLibApi extends BaseApi { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SenderPluginCommandPtr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_SpotubePlugin; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_SpotubePlugin; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_SpotubePluginPtr; } class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { @@ -494,13 +570,694 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["that", "sender"], ); + @override + Stream crateApiPluginPluginSpotubePluginAuthState( + {required SpotubePlugin that}) { + final sink = RustStreamSink(); + unawaited(handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_StreamSink_auth_event_object_Sse(sink, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 3, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAuthStateConstMeta, + argValues: [that, sink], + apiImpl: this, + ))); + return sink.stream; + } + + TaskConstMeta get kCrateApiPluginPluginSpotubePluginAuthStateConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auth_state", + argNames: ["that", "sink"], + ); + + @override + PluginAlbumSender crateApiPluginPluginSpotubePluginAutoAccessorGetAlbum( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_album_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetAlbumConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetAlbumConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_album", + argNames: ["that"], + ); + + @override + PluginArtistSender crateApiPluginPluginSpotubePluginAutoAccessorGetArtist( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_artist_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetArtistConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetArtistConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_artist", + argNames: ["that"], + ); + + @override + PluginAudioSourceSender + crateApiPluginPluginSpotubePluginAutoAccessorGetAudioSource( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 6)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_audio_source_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetAudioSourceConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetAudioSourceConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_audio_source", + argNames: ["that"], + ); + + @override + PluginAuthSender crateApiPluginPluginSpotubePluginAutoAccessorGetAuth( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 7)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_auth_sender, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAutoAccessorGetAuthConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetAuthConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_auth", + argNames: ["that"], + ); + + @override + PluginBrowseSender crateApiPluginPluginSpotubePluginAutoAccessorGetBrowse( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 8)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_browse_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetBrowseConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetBrowseConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_browse", + argNames: ["that"], + ); + + @override + PluginCoreSender crateApiPluginPluginSpotubePluginAutoAccessorGetCore( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 9)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_core_sender, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAutoAccessorGetCoreConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetCoreConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_core", + argNames: ["that"], + ); + + @override + PluginPlaylistSender crateApiPluginPluginSpotubePluginAutoAccessorGetPlaylist( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 10)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_playlist_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetPlaylistConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetPlaylistConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_playlist", + argNames: ["that"], + ); + + @override + PluginSearchSender crateApiPluginPluginSpotubePluginAutoAccessorGetSearch( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 11)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_search_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetSearchConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetSearchConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_search", + argNames: ["that"], + ); + + @override + PluginTrackSender crateApiPluginPluginSpotubePluginAutoAccessorGetTrack( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 12)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_track_sender, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorGetTrackConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetTrackConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_track", + argNames: ["that"], + ); + + @override + PluginUserSender crateApiPluginPluginSpotubePluginAutoAccessorGetUser( + {required SpotubePlugin that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 13)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_plugin_user_sender, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAutoAccessorGetUserConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorGetUserConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_get_user", + argNames: ["that"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetAlbum( + {required SpotubePlugin that, required PluginAlbumSender album}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_album_sender(album, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetAlbumConstMeta, + argValues: [that, album], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetAlbumConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_album", + argNames: ["that", "album"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetArtist( + {required SpotubePlugin that, required PluginArtistSender artist}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_artist_sender(artist, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 15)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetArtistConstMeta, + argValues: [that, artist], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetArtistConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_artist", + argNames: ["that", "artist"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetAudioSource( + {required SpotubePlugin that, + required PluginAudioSourceSender audioSource}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_audio_source_sender(audioSource, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 16)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetAudioSourceConstMeta, + argValues: [that, audioSource], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetAudioSourceConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_audio_source", + argNames: ["that", "audioSource"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetAuth( + {required SpotubePlugin that, required PluginAuthSender auth}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_auth_sender(auth, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 17)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAutoAccessorSetAuthConstMeta, + argValues: [that, auth], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetAuthConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_auth", + argNames: ["that", "auth"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetBrowse( + {required SpotubePlugin that, required PluginBrowseSender browse}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_browse_sender(browse, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 18)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetBrowseConstMeta, + argValues: [that, browse], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetBrowseConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_browse", + argNames: ["that", "browse"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetCore( + {required SpotubePlugin that, required PluginCoreSender core}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_core_sender(core, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 19)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAutoAccessorSetCoreConstMeta, + argValues: [that, core], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetCoreConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_core", + argNames: ["that", "core"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetPlaylist( + {required SpotubePlugin that, required PluginPlaylistSender playlist}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_playlist_sender(playlist, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 20)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetPlaylistConstMeta, + argValues: [that, playlist], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetPlaylistConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_playlist", + argNames: ["that", "playlist"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetSearch( + {required SpotubePlugin that, required PluginSearchSender search}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_search_sender(search, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 21)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetSearchConstMeta, + argValues: [that, search], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetSearchConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_search", + argNames: ["that", "search"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetTrack( + {required SpotubePlugin that, required PluginTrackSender track}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_track_sender(track, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 22)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: + kCrateApiPluginPluginSpotubePluginAutoAccessorSetTrackConstMeta, + argValues: [that, track], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetTrackConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_track", + argNames: ["that", "track"], + ); + + @override + void crateApiPluginPluginSpotubePluginAutoAccessorSetUser( + {required SpotubePlugin that, required PluginUserSender user}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_plugin_user_sender(user, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 23)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginAutoAccessorSetUserConstMeta, + argValues: [that, user], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiPluginPluginSpotubePluginAutoAccessorSetUserConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_auto_accessor_set_user", + argNames: ["that", "user"], + ); + + @override + Future crateApiPluginPluginSpotubePluginClose( + {required SpotubePlugin that, required OpaqueSender tx}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( + tx, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 24, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiPluginPluginSpotubePluginCloseConstMeta, + argValues: [that, tx], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiPluginPluginSpotubePluginCloseConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_close", + argNames: ["that", "tx"], + ); + + @override + Future crateApiPluginPluginSpotubePluginCreateContext( + {required SpotubePlugin that, + required String pluginScript, + required PluginConfiguration pluginConfig}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + that, serializer); + sse_encode_String(pluginScript, serializer); + sse_encode_box_autoadd_plugin_configuration(pluginConfig, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 25, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiPluginPluginSpotubePluginCreateContextConstMeta, + argValues: [that, pluginScript, pluginConfig], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiPluginPluginSpotubePluginCreateContextConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_create_context", + argNames: ["that", "pluginScript", "pluginConfig"], + ); + + @override + SpotubePlugin crateApiPluginPluginSpotubePluginNew() { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 26)!; + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin, + decodeErrorData: null, + ), + constMeta: kCrateApiPluginPluginSpotubePluginNewConstMeta, + argValues: [], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiPluginPluginSpotubePluginNewConstMeta => + const TaskConstMeta( + debugName: "SpotubePlugin_new", + argNames: [], + ); + @override Future crateApiInitApp() { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 3, port: port_); + funcId: 27, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -530,7 +1287,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(id, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 4, port: port_); + funcId: 28, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_full_album_object, @@ -564,7 +1321,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 5, port: port_); + funcId: 29, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -595,7 +1352,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_list_String(ids, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 6, port: port_); + funcId: 30, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -631,7 +1388,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 7, port: port_); + funcId: 31, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -662,7 +1419,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_list_String(ids, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 8, port: port_); + funcId: 32, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -698,7 +1455,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 9, port: port_); + funcId: 33, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -730,7 +1487,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(id, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 10, port: port_); + funcId: 34, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_full_artist_object, @@ -767,7 +1524,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 11, port: port_); + funcId: 35, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -798,7 +1555,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_list_String(ids, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 12, port: port_); + funcId: 36, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -834,7 +1591,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 13, port: port_); + funcId: 37, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -866,7 +1623,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_list_String(ids, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 14, port: port_); + funcId: 38, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -898,7 +1655,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_box_autoadd_spotube_track_object(track, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 15, port: port_); + funcId: 39, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_spotube_audio_source_match_object, @@ -932,7 +1689,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_box_autoadd_spotube_audio_source_match_object( matched, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 16, port: port_); + funcId: 40, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_spotube_audio_source_stream_object, @@ -961,7 +1718,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( mpscTx, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 17, port: port_); + funcId: 41, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -990,7 +1747,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( mpscTx, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 18, port: port_); + funcId: 42, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_bool, @@ -1019,7 +1776,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( mpscTx, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 19, port: port_); + funcId: 43, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1055,7 +1812,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 20, port: port_); + funcId: 44, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1090,7 +1847,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 21, port: port_); + funcId: 45, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1116,7 +1873,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_box_autoadd_plugin_configuration(that, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 22, port: port_); + funcId: 46, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -1148,7 +1905,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_box_autoadd_plugin_configuration(pluginConfig, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 23, port: port_); + funcId: 47, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_opt_box_autoadd_plugin_update_available, @@ -1180,7 +1937,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_box_autoadd_scrobble_details(details, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 24, port: port_); + funcId: 48, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1208,7 +1965,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( mpscTx, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 25, port: port_); + funcId: 49, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -1243,7 +2000,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_list_String(trackIds, serializer); sse_encode_opt_box_autoadd_u_32(position, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 26, port: port_); + funcId: 50, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1284,7 +2041,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_bool(public, serializer); sse_encode_opt_box_autoadd_bool(collaborative, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 27, port: port_); + funcId: 51, port: port_); }, codec: SseCodec( decodeSuccessData: @@ -1334,7 +2091,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(playlistId, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 28, port: port_); + funcId: 52, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1368,7 +2125,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(id, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 29, port: port_); + funcId: 53, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_full_playlist_object, @@ -1402,7 +2159,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_String(playlistId, serializer); sse_encode_list_String(trackIds, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 30, port: port_); + funcId: 54, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1435,7 +2192,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(playlistId, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 31, port: port_); + funcId: 55, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1471,7 +2228,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 32, port: port_); + funcId: 56, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1502,7 +2259,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(playlistId, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 33, port: port_); + funcId: 57, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1541,7 +2298,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_bool(public, serializer); sse_encode_opt_box_autoadd_bool(collaborative, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 34, port: port_); + funcId: 58, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1595,7 +2352,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 35, port: port_); + funcId: 59, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1627,7 +2384,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(query, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 36, port: port_); + funcId: 60, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_search_response_object, @@ -1663,7 +2420,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 37, port: port_); + funcId: 61, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1691,7 +2448,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( mpscTx, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 38, port: port_); + funcId: 62, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_String, @@ -1727,7 +2484,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 39, port: port_); + funcId: 63, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1764,7 +2521,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 40, port: port_); + funcId: 64, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1795,7 +2552,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(id, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 41, port: port_); + funcId: 65, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_track_object, @@ -1826,7 +2583,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_String(id, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 42, port: port_); + funcId: 66, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_spotube_track_object, @@ -1857,7 +2614,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_list_String(ids, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 43, port: port_); + funcId: 67, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1888,7 +2645,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { mpscTx, serializer); sse_encode_list_String(ids, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 44, port: port_); + funcId: 68, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -1916,7 +2673,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( mpscTx, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 45, port: port_); + funcId: 69, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_user_object, @@ -1950,7 +2707,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 46, port: port_); + funcId: 70, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -1985,7 +2742,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 47, port: port_); + funcId: 71, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -2020,7 +2777,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 48, port: port_); + funcId: 72, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -2055,7 +2812,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_opt_box_autoadd_u_32(offset, serializer); sse_encode_opt_box_autoadd_u_32(limit, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 49, port: port_); + funcId: 73, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_spotube_pagination_response_object, @@ -2083,7 +2840,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_box_autoadd_spotube_audio_lossless_container_quality( that, serializer); - return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 50)!; + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 74)!; }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -2113,7 +2870,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_box_autoadd_spotube_audio_lossy_container_quality( that, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 51, port: port_); + funcId: 75, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -2142,7 +2899,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_box_autoadd_spotube_audio_source_container_preset( that, serializer); - return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 52)!; + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 76)!; }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -2162,85 +2919,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["that"], ); - @override - Future crateApiPluginPluginSpotubePluginDispose( - {required SpotubePlugin that, required OpaqueSender tx}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_box_autoadd_spotube_plugin(that, serializer); - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( - tx, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 53, port: port_); - }, - codec: SseCodec( - decodeSuccessData: sse_decode_unit, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiPluginPluginSpotubePluginDisposeConstMeta, - argValues: [that, tx], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiPluginPluginSpotubePluginDisposeConstMeta => - const TaskConstMeta( - debugName: "spotube_plugin_dispose", - argNames: ["that", "tx"], - ); - - @override - SpotubePlugin crateApiPluginPluginSpotubePluginNew() { - return handler.executeSync(SyncTask( - callFfi: () { - final serializer = SseSerializer(generalizedFrbRustBinding); - return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 54)!; - }, - codec: SseCodec( - decodeSuccessData: sse_decode_spotube_plugin, - decodeErrorData: null, - ), - constMeta: kCrateApiPluginPluginSpotubePluginNewConstMeta, - argValues: [], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiPluginPluginSpotubePluginNewConstMeta => - const TaskConstMeta( - debugName: "spotube_plugin_new", - argNames: [], - ); - - @override - OpaqueSender crateApiPluginPluginSpotubePluginNewContext( - {required String pluginScript, - required PluginConfiguration pluginConfig}) { - return handler.executeSync(SyncTask( - callFfi: () { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_String(pluginScript, serializer); - sse_encode_box_autoadd_plugin_configuration(pluginConfig, serializer); - return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 55)!; - }, - codec: SseCodec( - decodeSuccessData: - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiPluginPluginSpotubePluginNewContextConstMeta, - argValues: [pluginScript, pluginConfig], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiPluginPluginSpotubePluginNewContextConstMeta => - const TaskConstMeta( - debugName: "spotube_plugin_new_context", - argNames: ["pluginScript", "pluginConfig"], - ); - RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_OpaqueSender => wire .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender; @@ -2265,6 +2943,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { get rust_arc_decrement_strong_count_SenderPluginCommand => wire .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand; + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_SpotubePlugin => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_SpotubePlugin => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin; + @protected AnyhowException dco_decode_AnyhowException(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -2295,6 +2981,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return SenderPluginCommandImpl.frbInternalDcoDecode(raw as List); } + @protected + SpotubePlugin + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SpotubePluginImpl.frbInternalDcoDecode(raw as List); + } + @protected OpaqueSender dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -2303,6 +2997,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return OpaqueSenderImpl.frbInternalDcoDecode(raw as List); } + @protected + SpotubePlugin + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SpotubePluginImpl.frbInternalDcoDecode(raw as List); + } + @protected OpaqueSender dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -2311,6 +3013,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return OpaqueSenderImpl.frbInternalDcoDecode(raw as List); } + @protected + SpotubePlugin + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SpotubePluginImpl.frbInternalDcoDecode(raw as List); + } + @protected OpaqueSender dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -2335,12 +3045,44 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return SenderPluginCommandImpl.frbInternalDcoDecode(raw as List); } + @protected + SpotubePlugin + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SpotubePluginImpl.frbInternalDcoDecode(raw as List); + } + + @protected + RustStreamSink dco_decode_StreamSink_auth_event_object_Sse( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + throw UnimplementedError(); + } + @protected String dco_decode_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return raw as String; } + @protected + AuthEventObject dco_decode_auth_event_object(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 1) + throw Exception('unexpected arr length: expect 1 but see ${arr.length}'); + return AuthEventObject( + eventType: dco_decode_auth_event_type(arr[0]), + ); + } + + @protected + AuthEventType dco_decode_auth_event_type(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return AuthEventType.values[raw as int]; + } + @protected bool dco_decode_bool(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -2511,12 +3253,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return dco_decode_spotube_full_playlist_object(raw); } - @protected - SpotubePlugin dco_decode_box_autoadd_spotube_plugin(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return dco_decode_spotube_plugin(raw); - } - @protected SpotubeSimpleAlbumObject dco_decode_box_autoadd_spotube_simple_album_object( dynamic raw) { @@ -3234,26 +3970,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } - @protected - SpotubePlugin dco_decode_spotube_plugin(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - final arr = raw as List; - if (arr.length != 10) - throw Exception('unexpected arr length: expect 10 but see ${arr.length}'); - return SpotubePlugin.raw( - artist: dco_decode_plugin_artist_sender(arr[0]), - album: dco_decode_plugin_album_sender(arr[1]), - audioSource: dco_decode_plugin_audio_source_sender(arr[2]), - auth: dco_decode_plugin_auth_sender(arr[3]), - browse: dco_decode_plugin_browse_sender(arr[4]), - core: dco_decode_plugin_core_sender(arr[5]), - playlist: dco_decode_plugin_playlist_sender(arr[6]), - search: dco_decode_plugin_search_sender(arr[7]), - track: dco_decode_plugin_track_sender(arr[8]), - user: dco_decode_plugin_user_sender(arr[9]), - ); - } - @protected SpotubeSearchResponseObject dco_decode_spotube_search_response_object( dynamic raw) { @@ -3420,6 +4136,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + SpotubePlugin + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SpotubePluginImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected OpaqueSender sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -3429,6 +4154,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + SpotubePlugin + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SpotubePluginImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected OpaqueSender sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -3438,6 +4172,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + SpotubePlugin + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SpotubePluginImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected OpaqueSender sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -3465,6 +4208,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + SpotubePlugin + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SpotubePluginImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + RustStreamSink sse_decode_StreamSink_auth_event_object_Sse( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + throw UnimplementedError('Unreachable ()'); + } + @protected String sse_decode_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -3472,6 +4231,20 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return utf8.decoder.convert(inner); } + @protected + AuthEventObject sse_decode_auth_event_object(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_eventType = sse_decode_auth_event_type(deserializer); + return AuthEventObject(eventType: var_eventType); + } + + @protected + AuthEventType sse_decode_auth_event_type(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_i_32(deserializer); + return AuthEventType.values[inner]; + } + @protected bool sse_decode_bool(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -3654,13 +4427,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (sse_decode_spotube_full_playlist_object(deserializer)); } - @protected - SpotubePlugin sse_decode_box_autoadd_spotube_plugin( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return (sse_decode_spotube_plugin(deserializer)); - } - @protected SpotubeSimpleAlbumObject sse_decode_box_autoadd_spotube_simple_album_object( SseDeserializer deserializer) { @@ -4552,32 +5318,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } - @protected - SpotubePlugin sse_decode_spotube_plugin(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var var_artist = sse_decode_plugin_artist_sender(deserializer); - var var_album = sse_decode_plugin_album_sender(deserializer); - var var_audioSource = sse_decode_plugin_audio_source_sender(deserializer); - var var_auth = sse_decode_plugin_auth_sender(deserializer); - var var_browse = sse_decode_plugin_browse_sender(deserializer); - var var_core = sse_decode_plugin_core_sender(deserializer); - var var_playlist = sse_decode_plugin_playlist_sender(deserializer); - var var_search = sse_decode_plugin_search_sender(deserializer); - var var_track = sse_decode_plugin_track_sender(deserializer); - var var_user = sse_decode_plugin_user_sender(deserializer); - return SpotubePlugin.raw( - artist: var_artist, - album: var_album, - audioSource: var_audioSource, - auth: var_auth, - browse: var_browse, - core: var_core, - playlist: var_playlist, - search: var_search, - track: var_track, - user: var_user); - } - @protected SpotubeSearchResponseObject sse_decode_spotube_search_response_object( SseDeserializer deserializer) { @@ -4767,6 +5507,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer); } + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SpotubePluginImpl).frbInternalSseEncode(move: true), + serializer); + } + @protected void sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -4777,6 +5527,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer); } + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SpotubePluginImpl).frbInternalSseEncode(move: false), + serializer); + } + @protected void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -4787,6 +5547,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer); } + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SpotubePluginImpl).frbInternalSseEncode(move: false), + serializer); + } + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -4817,12 +5587,49 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer); } + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SpotubePluginImpl).frbInternalSseEncode(move: null), + serializer); + } + + @protected + void sse_encode_StreamSink_auth_event_object_Sse( + RustStreamSink self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String( + self.setupAndSerialize( + codec: SseCodec( + decodeSuccessData: sse_decode_auth_event_object, + decodeErrorData: sse_decode_AnyhowException, + )), + serializer); + } + @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_auth_event_object( + AuthEventObject self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_auth_event_type(self.eventType, serializer); + } + + @protected + void sse_encode_auth_event_type( + AuthEventType self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.index, serializer); + } + @protected void sse_encode_bool(bool self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -5001,13 +5808,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_spotube_full_playlist_object(self, serializer); } - @protected - void sse_encode_box_autoadd_spotube_plugin( - SpotubePlugin self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_spotube_plugin(self, serializer); - } - @protected void sse_encode_box_autoadd_spotube_simple_album_object( SpotubeSimpleAlbumObject self, SseSerializer serializer) { @@ -5720,21 +6520,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } - @protected - void sse_encode_spotube_plugin(SpotubePlugin self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_plugin_artist_sender(self.artist, serializer); - sse_encode_plugin_album_sender(self.album, serializer); - sse_encode_plugin_audio_source_sender(self.audioSource, serializer); - sse_encode_plugin_auth_sender(self.auth, serializer); - sse_encode_plugin_browse_sender(self.browse, serializer); - sse_encode_plugin_core_sender(self.core, serializer); - sse_encode_plugin_playlist_sender(self.playlist, serializer); - sse_encode_plugin_search_sender(self.search, serializer); - sse_encode_plugin_track_sender(self.track, serializer); - sse_encode_plugin_user_sender(self.user, serializer); - } - @protected void sse_encode_spotube_search_response_object( SpotubeSearchResponseObject self, SseSerializer serializer) { @@ -5910,3 +6695,127 @@ class SenderPluginCommandImpl extends RustOpaque .instance.api.rust_arc_decrement_strong_count_SenderPluginCommandPtr, ); } + +@sealed +class SpotubePluginImpl extends RustOpaque implements SpotubePlugin { + // Not to be used by end users + SpotubePluginImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + SpotubePluginImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_SpotubePlugin, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_SpotubePlugin, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_SpotubePluginPtr, + ); + + Stream authState() => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAuthState( + that: this, + ); + + PluginAlbumSender get album => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetAlbum( + that: this, + ); + + PluginArtistSender get artist => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetArtist( + that: this, + ); + + PluginAudioSourceSender get audioSource => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetAudioSource( + that: this, + ); + + PluginAuthSender get auth => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAutoAccessorGetAuth( + that: this, + ); + + PluginBrowseSender get browse => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetBrowse( + that: this, + ); + + PluginCoreSender get core => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAutoAccessorGetCore( + that: this, + ); + + PluginPlaylistSender get playlist => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetPlaylist( + that: this, + ); + + PluginSearchSender get search => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetSearch( + that: this, + ); + + PluginTrackSender get track => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorGetTrack( + that: this, + ); + + PluginUserSender get user => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAutoAccessorGetUser( + that: this, + ); + + set album(PluginAlbumSender album) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetAlbum( + that: this, album: album); + + set artist(PluginArtistSender artist) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetArtist( + that: this, artist: artist); + + set audioSource(PluginAudioSourceSender audioSource) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetAudioSource( + that: this, audioSource: audioSource); + + set auth(PluginAuthSender auth) => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAutoAccessorSetAuth( + that: this, auth: auth); + + set browse(PluginBrowseSender browse) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetBrowse( + that: this, browse: browse); + + set core(PluginCoreSender core) => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAutoAccessorSetCore( + that: this, core: core); + + set playlist(PluginPlaylistSender playlist) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetPlaylist( + that: this, playlist: playlist); + + set search(PluginSearchSender search) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetSearch( + that: this, search: search); + + set track(PluginTrackSender track) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginAutoAccessorSetTrack( + that: this, track: track); + + set user(PluginUserSender user) => + RustLib.instance.api.crateApiPluginPluginSpotubePluginAutoAccessorSetUser( + that: this, user: user); + + Future close({required OpaqueSender tx}) => RustLib.instance.api + .crateApiPluginPluginSpotubePluginClose(that: this, tx: tx); + + Future createContext( + {required String pluginScript, + required PluginConfiguration pluginConfig}) => + RustLib.instance.api.crateApiPluginPluginSpotubePluginCreateContext( + that: this, pluginScript: pluginScript, pluginConfig: pluginConfig); +} diff --git a/lib/src/rust/frb_generated.io.dart b/lib/src/rust/frb_generated.io.dart index 10ad8003..47459acc 100644 --- a/lib/src/rust/frb_generated.io.dart +++ b/lib/src/rust/frb_generated.io.dart @@ -7,6 +7,7 @@ import 'api/plugin/commands.dart'; import 'api/plugin/models/album.dart'; import 'api/plugin/models/artist.dart'; import 'api/plugin/models/audio_source.dart'; +import 'api/plugin/models/auth.dart'; import 'api/plugin/models/browse.dart'; import 'api/plugin/models/core.dart'; import 'api/plugin/models/image.dart'; @@ -44,6 +45,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { get rust_arc_decrement_strong_count_SenderPluginCommandPtr => wire ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommandPtr; + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_SpotubePluginPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePluginPtr; + @protected AnyhowException dco_decode_AnyhowException(dynamic raw); @@ -62,16 +67,31 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand( dynamic raw); + @protected + SpotubePlugin + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw); + @protected OpaqueSender dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( dynamic raw); + @protected + SpotubePlugin + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw); + @protected OpaqueSender dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( dynamic raw); + @protected + SpotubePlugin + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw); + @protected OpaqueSender dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -87,9 +107,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand( dynamic raw); + @protected + SpotubePlugin + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + dynamic raw); + + @protected + RustStreamSink dco_decode_StreamSink_auth_event_object_Sse( + dynamic raw); + @protected String dco_decode_String(dynamic raw); + @protected + AuthEventObject dco_decode_auth_event_object(dynamic raw); + + @protected + AuthEventType dco_decode_auth_event_type(dynamic raw); + @protected bool dco_decode_bool(dynamic raw); @@ -180,9 +215,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { SpotubeFullPlaylistObject dco_decode_box_autoadd_spotube_full_playlist_object( dynamic raw); - @protected - SpotubePlugin dco_decode_box_autoadd_spotube_plugin(dynamic raw); - @protected SpotubeSimpleAlbumObject dco_decode_box_autoadd_spotube_simple_album_object( dynamic raw); @@ -414,9 +446,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { SpotubePaginationResponseObjectItem dco_decode_spotube_pagination_response_object_item(dynamic raw); - @protected - SpotubePlugin dco_decode_spotube_plugin(dynamic raw); - @protected SpotubeSearchResponseObject dco_decode_spotube_search_response_object( dynamic raw); @@ -471,16 +500,31 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand( SseDeserializer deserializer); + @protected + SpotubePlugin + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer); + @protected OpaqueSender sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( SseDeserializer deserializer); + @protected + SpotubePlugin + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer); + @protected OpaqueSender sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( SseDeserializer deserializer); + @protected + SpotubePlugin + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer); + @protected OpaqueSender sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -496,9 +540,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand( SseDeserializer deserializer); + @protected + SpotubePlugin + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SseDeserializer deserializer); + + @protected + RustStreamSink sse_decode_StreamSink_auth_event_object_Sse( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); + @protected + AuthEventObject sse_decode_auth_event_object(SseDeserializer deserializer); + + @protected + AuthEventType sse_decode_auth_event_type(SseDeserializer deserializer); + @protected bool sse_decode_bool(SseDeserializer deserializer); @@ -603,10 +662,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { SpotubeFullPlaylistObject sse_decode_box_autoadd_spotube_full_playlist_object( SseDeserializer deserializer); - @protected - SpotubePlugin sse_decode_box_autoadd_spotube_plugin( - SseDeserializer deserializer); - @protected SpotubeSimpleAlbumObject sse_decode_box_autoadd_spotube_simple_album_object( SseDeserializer deserializer); @@ -870,9 +925,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_spotube_pagination_response_object_item( SseDeserializer deserializer); - @protected - SpotubePlugin sse_decode_spotube_plugin(SseDeserializer deserializer); - @protected SpotubeSearchResponseObject sse_decode_spotube_search_response_object( SseDeserializer deserializer); @@ -931,16 +983,31 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand( SenderPluginCommand self, SseSerializer serializer); + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer); + @protected void sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( OpaqueSender self, SseSerializer serializer); + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer); + @protected void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( OpaqueSender self, SseSerializer serializer); + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer); + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerOpaqueSender( @@ -956,9 +1023,25 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand( SenderPluginCommand self, SseSerializer serializer); + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + SpotubePlugin self, SseSerializer serializer); + + @protected + void sse_encode_StreamSink_auth_event_object_Sse( + RustStreamSink self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_auth_event_object( + AuthEventObject self, SseSerializer serializer); + + @protected + void sse_encode_auth_event_type(AuthEventType self, SseSerializer serializer); + @protected void sse_encode_bool(bool self, SseSerializer serializer); @@ -1059,10 +1142,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_box_autoadd_spotube_full_playlist_object( SpotubeFullPlaylistObject self, SseSerializer serializer); - @protected - void sse_encode_box_autoadd_spotube_plugin( - SpotubePlugin self, SseSerializer serializer); - @protected void sse_encode_box_autoadd_spotube_simple_album_object( SpotubeSimpleAlbumObject self, SseSerializer serializer); @@ -1323,9 +1402,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_spotube_pagination_response_object_item( SpotubePaginationResponseObjectItem self, SseSerializer serializer); - @protected - void sse_encode_spotube_plugin(SpotubePlugin self, SseSerializer serializer); - @protected void sse_encode_spotube_search_response_object( SpotubeSearchResponseObject self, SseSerializer serializer); @@ -1475,4 +1551,36 @@ class RustLibWire implements BaseWire { late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommand = _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSenderPluginCommandPtr .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePluginPtr = + _lookup)>>( + 'frbgen_spotube_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePluginPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePluginPtr = + _lookup)>>( + 'frbgen_spotube_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePluginPtr + .asFunction)>(); } diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 91ec64c2..cd93dd97 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -22,6 +22,8 @@ llrt_modules = { git = "https://github.com/awslabs/llrt.git", rev = "7d749dd18cf [patch."https://github.com/DelSkayn/rquickjs"] rquickjs = "0.10.0" +[path.crates-io] +rquickjs = "0.10.0" [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(frb_expand)'] } diff --git a/rust/src/api/plugin/models/auth.rs b/rust/src/api/plugin/models/auth.rs new file mode 100644 index 00000000..61119bd4 --- /dev/null +++ b/rust/src/api/plugin/models/auth.rs @@ -0,0 +1,14 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum AuthEventType { + Login, + RefreshSession, + Logout, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AuthEventObject { + pub event_type: AuthEventType, +} diff --git a/rust/src/api/plugin/models/mod.rs b/rust/src/api/plugin/models/mod.rs index a17dd5e3..9c96adaf 100644 --- a/rust/src/api/plugin/models/mod.rs +++ b/rust/src/api/plugin/models/mod.rs @@ -9,3 +9,4 @@ pub mod track; pub mod user; pub mod pagination; pub mod core; +pub mod auth; diff --git a/rust/src/api/plugin/plugin.rs b/rust/src/api/plugin/plugin.rs index 5a2e1e56..1be942b9 100644 --- a/rust/src/api/plugin/plugin.rs +++ b/rust/src/api/plugin/plugin.rs @@ -3,20 +3,25 @@ use crate::api::plugin::executors::{ execute_albums, execute_artists, execute_audio_source, execute_auth, execute_browse, execute_core, execute_playlist, execute_search, execute_track, execute_user, }; +use crate::api::plugin::models::auth::{AuthEventObject, AuthEventType}; use crate::api::plugin::models::core::PluginConfiguration; use crate::api::plugin::senders::{ PluginAlbumSender, PluginArtistSender, PluginAudioSourceSender, PluginAuthSender, PluginBrowseSender, PluginCoreSender, PluginPlaylistSender, PluginSearchSender, PluginTrackSender, PluginUserSender, }; +use crate::frb_generated::StreamSink; use anyhow::anyhow; -use flutter_rust_bridge::frb; -use llrt_modules::{abort, buffer, console, crypto, events, exceptions, fetch, navigator, timers, url, util}; +use flutter_rust_bridge::{frb, Rust2DartSendError}; use llrt_modules::module_builder::ModuleBuilder; -use rquickjs::{async_with, AsyncContext, AsyncRuntime, Error}; +use llrt_modules::{ + abort, buffer, console, crypto, events, exceptions, fetch, navigator, timers, url, util, +}; +use rquickjs::prelude::Func; +use rquickjs::{async_with, AsyncContext, AsyncRuntime, Error, Object}; use std::thread; use tokio::sync::mpsc; -use tokio::sync::mpsc::Sender; +use tokio::sync::mpsc::{Receiver, Sender}; use tokio::task; use tokio::task::LocalSet; @@ -42,8 +47,7 @@ async fn create_context() -> anyhow::Result<(AsyncContext, AsyncRuntime)> { .with_global(navigator::init) .with_global(url::init) .with_global(timers::init) - .with_global(util::init) - ; + .with_global(util::init); let (module_resolver, module_loader, global_attachment) = module_builder.build(); runtime @@ -65,7 +69,7 @@ async fn create_context() -> anyhow::Result<(AsyncContext, AsyncRuntime)> { } #[frb(ignore)] async fn js_executor_thread( - rx: &mut mpsc::Receiver, + rx: &mut Receiver, ctx: &AsyncContext, ) -> anyhow::Result<()> { while let Some(command) = rx.recv().await { @@ -110,11 +114,15 @@ pub struct SpotubePlugin { pub search: PluginSearchSender, pub track: PluginTrackSender, pub user: PluginUserSender, + event_tx: Sender, + event_rx: Receiver, } impl SpotubePlugin { #[frb(sync)] pub fn new() -> Self { + let (event_tx, event_rx) = mpsc::channel(32); + Self { artist: PluginArtistSender::new(), album: PluginAlbumSender::new(), @@ -126,16 +134,28 @@ impl SpotubePlugin { search: PluginSearchSender::new(), track: PluginTrackSender::new(), user: PluginUserSender::new(), + event_tx, + event_rx, } } - #[frb(sync)] - pub fn new_context( + pub async fn auth_state(&mut self, sink: StreamSink) -> anyhow::Result<()> { + while let Some(event) = self.event_rx.recv().await { + sink.add(event) + .map_err(|e: Rust2DartSendError| anyhow::anyhow!(e))?; + } + + Ok(()) + } + + // #[frb(sync)] + pub fn create_context( + &self, plugin_script: String, plugin_config: PluginConfiguration, ) -> anyhow::Result { let (command_tx, mut command_rx) = mpsc::channel(32); - + let sender = self.event_tx.clone(); let _thread_handle = thread::spawn(move || { let rt = tokio::runtime::Builder::new_current_thread() .enable_all() @@ -143,7 +163,7 @@ impl SpotubePlugin { .unwrap(); let local = LocalSet::new(); if let Err(e) = local.block_on(&rt, async { - let (ctx, runtime) = create_context().await?; + let (ctx, _) = create_context().await?; let injection = format!( "globalThis.pluginInstance = new {}();", @@ -153,6 +173,39 @@ impl SpotubePlugin { ctx.with(|cx| cx.eval::<(), _>(script.as_str())).await?; + async_with!(ctx => |ctx|{ + let globals = ctx.globals(); + let callback = Func::new(move |event: Object| -> rquickjs::Result<()>{ + let sender_clone = sender.clone(); + let event_type_js: rquickjs::String = event.get("eventType")?; + let event_type = serde_json::from_value::(serde_json::Value::String(event_type_js.to_string()?)); + if let Ok(event_type) = event_type { + tokio::spawn(async move{ + if let Err(e) = sender_clone.send(AuthEventObject{event_type}).await { + eprintln!("Error sending auth event: {:?}", e); + } + }); + Ok(()) + } else { + Err(Error::FromJs{ + from: "event.eventType", + to: "AuthEventType", + message: Some("Failed to deserialize eventType".to_string()) + }) + } + }); + + if let Err(e) = globals.get::<_, Object>("pluginInstance")?.get::<_, Object>("auth")?.set( + "onAuthEvent", callback + ) { + eprintln!("Error setting auth event handler: {:?}", e); + } + + Ok::<(), Error>(()) + }) + .await + .map_err(|e| anyhow!("[onAuthEvent] {e}"))?; + if let Err(e) = js_executor_thread(&mut command_rx, &ctx).await { eprintln!("JS executor error: {}", e); } @@ -165,7 +218,7 @@ impl SpotubePlugin { Ok(OpaqueSender { sender: command_tx }) } - pub async fn dispose(&self, tx: OpaqueSender) -> anyhow::Result<()> { + pub async fn close(&self, tx: OpaqueSender) -> anyhow::Result<()> { tx.sender.send(PluginCommand::Shutdown).await?; Ok(()) } diff --git a/rust/src/api/plugin/senders.rs b/rust/src/api/plugin/senders.rs index 2a8a1303..0ee7a413 100644 --- a/rust/src/api/plugin/senders.rs +++ b/rust/src/api/plugin/senders.rs @@ -21,6 +21,7 @@ use anyhow::anyhow; use flutter_rust_bridge::frb; use tokio::sync::oneshot; +#[derive(Debug, Clone, Copy)] pub struct PluginArtistSender {} impl PluginArtistSender { @@ -136,6 +137,7 @@ impl PluginArtistSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginAlbumSender {} impl PluginAlbumSender { @@ -228,6 +230,7 @@ impl PluginAlbumSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginAudioSourceSender {} impl PluginAudioSourceSender { @@ -271,6 +274,7 @@ impl PluginAudioSourceSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginAuthSender {} impl PluginAuthSender { @@ -316,6 +320,7 @@ impl PluginAuthSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginBrowseSender {} impl PluginBrowseSender { @@ -365,6 +370,7 @@ impl PluginBrowseSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginCoreSender {} impl PluginCoreSender { @@ -425,6 +431,7 @@ impl PluginCoreSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginPlaylistSender {} impl PluginPlaylistSender { @@ -605,6 +612,7 @@ impl PluginPlaylistSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginSearchSender {} impl PluginSearchSender { @@ -727,6 +735,7 @@ impl PluginSearchSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginTrackSender {} impl PluginTrackSender { @@ -796,6 +805,7 @@ impl PluginTrackSender { } } +#[derive(Debug, Clone, Copy)] pub struct PluginUserSender {} impl PluginUserSender { diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index 546cc92b..6132d4ff 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -42,7 +42,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.11.1"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -836755871; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 1716120288; // Section: executor @@ -147,6 +147,1201 @@ fn wire__crate__api__plugin__plugin__OpaqueSender_auto_accessor_set_sender_impl( }, ) } +fn wire__crate__api__plugin__plugin__SpotubePlugin_auth_state_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auth_state", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_sink = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| async move { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || async move { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + )], + ); + for i in decode_indices_ { + match i { + 0 => { + api_that_guard = + Some(api_that.lockable_decode_async_ref_mut().await) + } + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = crate::api::plugin::plugin::SpotubePlugin::auth_state( + &mut *api_that_guard, + api_sink, + ) + .await?; + Ok(output_ok) + })() + .await, + ) + } + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_album_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_album", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.album.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_artist_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_artist", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.artist.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_audio_source_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_audio_source", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.audio_source.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_auth_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_auth", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.auth.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_browse_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_browse", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.browse.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_core_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_core", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.core.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_playlist_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_playlist", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.playlist.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_search_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_search", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.search.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_track_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_track", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.track.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_user_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_get_user", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok(api_that_guard.user.clone())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_album_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_album", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_album = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.album = api_album; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_artist_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_artist", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_artist = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.artist = api_artist; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_audio_source_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_audio_source", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_audio_source = + ::sse_decode( + &mut deserializer, + ); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.audio_source = api_audio_source; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_auth_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_auth", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_auth = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.auth = api_auth; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_browse_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_browse", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_browse = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.browse = api_browse; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_core_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_core", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_core = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.core = api_core; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_playlist_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_playlist", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_playlist = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.playlist = api_playlist; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_search_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_search", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_search = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.search = api_search; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_track_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_track", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_track = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.track = api_track; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_user_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_auto_accessor_set_user", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_user = + ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, true, + ), + ]); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref_mut()), + _ => unreachable!(), + } + } + let mut api_that_guard = api_that_guard.unwrap(); + let output_ok = Result::<_, ()>::Ok({ + { + api_that_guard.user = api_user; + }; + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_close_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_close", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_tx = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| async move { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || async move { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + )], + ); + for i in decode_indices_ { + match i { + 0 => { + api_that_guard = + Some(api_that.lockable_decode_async_ref().await) + } + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = crate::api::plugin::plugin::SpotubePlugin::close( + &*api_that_guard, + api_tx, + ) + .await?; + Ok(output_ok) + })() + .await, + ) + } + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_create_context_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_create_context", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_that = , + >>::sse_decode(&mut deserializer); + let api_plugin_script = ::sse_decode(&mut deserializer); + let api_plugin_config = + ::sse_decode( + &mut deserializer, + ); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let mut api_that_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_that, 0, false, + )], + ); + for i in decode_indices_ { + match i { + 0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()), + _ => unreachable!(), + } + } + let api_that_guard = api_that_guard.unwrap(); + let output_ok = crate::api::plugin::plugin::SpotubePlugin::create_context( + &*api_that_guard, + api_plugin_script, + api_plugin_config, + )?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__plugin__plugin__SpotubePlugin_new_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "SpotubePlugin_new", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let output_ok = + Result::<_, ()>::Ok(crate::api::plugin::plugin::SpotubePlugin::new())?; + Ok(output_ok) + })()) + }, + ) +} fn wire__crate__api__init_app_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -2298,115 +3493,6 @@ fn wire__crate__api__plugin__models__audio_source__spotube_audio_source_containe let output_ok = Result::<_,()>::Ok(crate::api::plugin::models::audio_source::SpotubeAudioSourceContainerPreset::file_extension(&api_that))?; Ok(output_ok) })()) }) } -fn wire__crate__api__plugin__plugin__spotube_plugin_dispose_impl( - port_: flutter_rust_bridge::for_generated::MessagePort, - ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len_: i32, - data_len_: i32, -) { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "spotube_plugin_dispose", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, - }, - move || { - let message = unsafe { - flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( - ptr_, - rust_vec_len_, - data_len_, - ) - }; - let mut deserializer = - flutter_rust_bridge::for_generated::SseDeserializer::new(message); - let api_that = - ::sse_decode(&mut deserializer); - let api_tx = ::sse_decode(&mut deserializer); - deserializer.end(); - move |context| async move { - transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( - (move || async move { - let output_ok = - crate::api::plugin::plugin::SpotubePlugin::dispose(&api_that, api_tx) - .await?; - Ok(output_ok) - })() - .await, - ) - } - }, - ) -} -fn wire__crate__api__plugin__plugin__spotube_plugin_new_impl( - ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len_: i32, - data_len_: i32, -) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "spotube_plugin_new", - port: None, - mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, - }, - move || { - let message = unsafe { - flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( - ptr_, - rust_vec_len_, - data_len_, - ) - }; - let mut deserializer = - flutter_rust_bridge::for_generated::SseDeserializer::new(message); - deserializer.end(); - transform_result_sse::<_, ()>((move || { - let output_ok = - Result::<_, ()>::Ok(crate::api::plugin::plugin::SpotubePlugin::new())?; - Ok(output_ok) - })()) - }, - ) -} -fn wire__crate__api__plugin__plugin__spotube_plugin_new_context_impl( - ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len_: i32, - data_len_: i32, -) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "spotube_plugin_new_context", - port: None, - mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, - }, - move || { - let message = unsafe { - flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( - ptr_, - rust_vec_len_, - data_len_, - ) - }; - let mut deserializer = - flutter_rust_bridge::for_generated::SseDeserializer::new(message); - let api_plugin_script = ::sse_decode(&mut deserializer); - let api_plugin_config = - ::sse_decode( - &mut deserializer, - ); - deserializer.end(); - transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( - (move || { - let output_ok = crate::api::plugin::plugin::SpotubePlugin::new_context( - api_plugin_script, - api_plugin_config, - )?; - Ok(output_ok) - })(), - ) - }, - ) -} // Section: related_funcs @@ -2419,6 +3505,9 @@ flutter_rust_bridge::frb_generated_moi_arc_impl_value!( flutter_rust_bridge::frb_generated_moi_arc_impl_value!( flutter_rust_bridge::for_generated::RustAutoOpaqueInner> ); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner +); // Section: dart2rust @@ -2460,6 +3549,16 @@ impl SseDecode for Sender { } } +impl SseDecode for SpotubePlugin { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = , + >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + impl SseDecode for RustOpaqueMoi> { @@ -2492,6 +3591,29 @@ impl SseDecode } } +impl SseDecode + for RustOpaqueMoi> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + +impl SseDecode + for StreamSink< + crate::api::plugin::models::auth::AuthEventObject, + flutter_rust_bridge::for_generated::SseCodec, + > +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return StreamSink::deserialize(inner); + } +} + impl SseDecode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -2500,6 +3622,30 @@ impl SseDecode for String { } } +impl SseDecode for crate::api::plugin::models::auth::AuthEventObject { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_eventType = + ::sse_decode(deserializer); + return crate::api::plugin::models::auth::AuthEventObject { + event_type: var_eventType, + }; + } +} + +impl SseDecode for crate::api::plugin::models::auth::AuthEventType { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return match inner { + 0 => crate::api::plugin::models::auth::AuthEventType::Login, + 1 => crate::api::plugin::models::auth::AuthEventType::RefreshSession, + 2 => crate::api::plugin::models::auth::AuthEventType::Logout, + _ => unreachable!("Invalid variant for AuthEventType: {}", inner), + }; + } +} + impl SseDecode for bool { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -3481,44 +4627,6 @@ impl SseDecode for crate::api::plugin::models::pagination::SpotubePaginationResp } } -impl SseDecode for crate::api::plugin::plugin::SpotubePlugin { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - let mut var_artist = - ::sse_decode(deserializer); - let mut var_album = - ::sse_decode(deserializer); - let mut var_audioSource = - ::sse_decode(deserializer); - let mut var_auth = - ::sse_decode(deserializer); - let mut var_browse = - ::sse_decode(deserializer); - let mut var_core = - ::sse_decode(deserializer); - let mut var_playlist = - ::sse_decode(deserializer); - let mut var_search = - ::sse_decode(deserializer); - let mut var_track = - ::sse_decode(deserializer); - let mut var_user = - ::sse_decode(deserializer); - return crate::api::plugin::plugin::SpotubePlugin { - artist: var_artist, - album: var_album, - audio_source: var_audioSource, - auth: var_auth, - browse: var_browse, - core: var_core, - playlist: var_playlist, - search: var_search, - track: var_track, - user: var_user, - }; - } -} - impl SseDecode for crate::api::plugin::models::search::SpotubeSearchResponseObject { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -3711,55 +4819,57 @@ fn pde_ffi_dispatcher_primary_impl( ) { // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { - 3 => wire__crate__api__init_app_impl(port, ptr, rust_vec_len, data_len), -4 => wire__crate__api__plugin__senders__plugin_album_sender_get_album_impl(port, ptr, rust_vec_len, data_len), -5 => wire__crate__api__plugin__senders__plugin_album_sender_releases_impl(port, ptr, rust_vec_len, data_len), -6 => wire__crate__api__plugin__senders__plugin_album_sender_save_impl(port, ptr, rust_vec_len, data_len), -7 => wire__crate__api__plugin__senders__plugin_album_sender_tracks_impl(port, ptr, rust_vec_len, data_len), -8 => wire__crate__api__plugin__senders__plugin_album_sender_unsave_impl(port, ptr, rust_vec_len, data_len), -9 => wire__crate__api__plugin__senders__plugin_artist_sender_albums_impl(port, ptr, rust_vec_len, data_len), -10 => wire__crate__api__plugin__senders__plugin_artist_sender_get_artist_impl(port, ptr, rust_vec_len, data_len), -11 => wire__crate__api__plugin__senders__plugin_artist_sender_related_impl(port, ptr, rust_vec_len, data_len), -12 => wire__crate__api__plugin__senders__plugin_artist_sender_save_impl(port, ptr, rust_vec_len, data_len), -13 => wire__crate__api__plugin__senders__plugin_artist_sender_top_tracks_impl(port, ptr, rust_vec_len, data_len), -14 => wire__crate__api__plugin__senders__plugin_artist_sender_unsave_impl(port, ptr, rust_vec_len, data_len), -15 => wire__crate__api__plugin__senders__plugin_audio_source_sender_matches_impl(port, ptr, rust_vec_len, data_len), -16 => wire__crate__api__plugin__senders__plugin_audio_source_sender_streams_impl(port, ptr, rust_vec_len, data_len), -17 => wire__crate__api__plugin__senders__plugin_auth_sender_authenticate_impl(port, ptr, rust_vec_len, data_len), -18 => wire__crate__api__plugin__senders__plugin_auth_sender_is_authenticated_impl(port, ptr, rust_vec_len, data_len), -19 => wire__crate__api__plugin__senders__plugin_auth_sender_logout_impl(port, ptr, rust_vec_len, data_len), -20 => wire__crate__api__plugin__senders__plugin_browse_sender_section_items_impl(port, ptr, rust_vec_len, data_len), -21 => wire__crate__api__plugin__senders__plugin_browse_sender_sections_impl(port, ptr, rust_vec_len, data_len), -22 => wire__crate__api__plugin__models__core__plugin_configuration_slug_impl(port, ptr, rust_vec_len, data_len), -23 => wire__crate__api__plugin__senders__plugin_core_sender_check_update_impl(port, ptr, rust_vec_len, data_len), -24 => wire__crate__api__plugin__senders__plugin_core_sender_scrobble_impl(port, ptr, rust_vec_len, data_len), -25 => wire__crate__api__plugin__senders__plugin_core_sender_support_impl(port, ptr, rust_vec_len, data_len), -26 => wire__crate__api__plugin__senders__plugin_playlist_sender_add_tracks_impl(port, ptr, rust_vec_len, data_len), -27 => wire__crate__api__plugin__senders__plugin_playlist_sender_create_playlist_impl(port, ptr, rust_vec_len, data_len), -28 => wire__crate__api__plugin__senders__plugin_playlist_sender_delete_playlist_impl(port, ptr, rust_vec_len, data_len), -29 => wire__crate__api__plugin__senders__plugin_playlist_sender_get_playlist_impl(port, ptr, rust_vec_len, data_len), -30 => wire__crate__api__plugin__senders__plugin_playlist_sender_remove_tracks_impl(port, ptr, rust_vec_len, data_len), -31 => wire__crate__api__plugin__senders__plugin_playlist_sender_save_impl(port, ptr, rust_vec_len, data_len), -32 => wire__crate__api__plugin__senders__plugin_playlist_sender_tracks_impl(port, ptr, rust_vec_len, data_len), -33 => wire__crate__api__plugin__senders__plugin_playlist_sender_unsave_impl(port, ptr, rust_vec_len, data_len), -34 => wire__crate__api__plugin__senders__plugin_playlist_sender_update_playlist_impl(port, ptr, rust_vec_len, data_len), -35 => wire__crate__api__plugin__senders__plugin_search_sender_albums_impl(port, ptr, rust_vec_len, data_len), -36 => wire__crate__api__plugin__senders__plugin_search_sender_all_impl(port, ptr, rust_vec_len, data_len), -37 => wire__crate__api__plugin__senders__plugin_search_sender_artists_impl(port, ptr, rust_vec_len, data_len), -38 => wire__crate__api__plugin__senders__plugin_search_sender_chips_impl(port, ptr, rust_vec_len, data_len), -39 => wire__crate__api__plugin__senders__plugin_search_sender_playlists_impl(port, ptr, rust_vec_len, data_len), -40 => wire__crate__api__plugin__senders__plugin_search_sender_tracks_impl(port, ptr, rust_vec_len, data_len), -41 => wire__crate__api__plugin__senders__plugin_track_sender_get_track_impl(port, ptr, rust_vec_len, data_len), -42 => wire__crate__api__plugin__senders__plugin_track_sender_radio_impl(port, ptr, rust_vec_len, data_len), -43 => wire__crate__api__plugin__senders__plugin_track_sender_save_impl(port, ptr, rust_vec_len, data_len), -44 => wire__crate__api__plugin__senders__plugin_track_sender_unsave_impl(port, ptr, rust_vec_len, data_len), -45 => wire__crate__api__plugin__senders__plugin_user_sender_me_impl(port, ptr, rust_vec_len, data_len), -46 => wire__crate__api__plugin__senders__plugin_user_sender_saved_albums_impl(port, ptr, rust_vec_len, data_len), -47 => wire__crate__api__plugin__senders__plugin_user_sender_saved_artists_impl(port, ptr, rust_vec_len, data_len), -48 => wire__crate__api__plugin__senders__plugin_user_sender_saved_playlists_impl(port, ptr, rust_vec_len, data_len), -49 => wire__crate__api__plugin__senders__plugin_user_sender_saved_tracks_impl(port, ptr, rust_vec_len, data_len), -51 => wire__crate__api__plugin__models__audio_source__spotube_audio_lossy_container_quality_to_string_fmt_impl(port, ptr, rust_vec_len, data_len), -53 => wire__crate__api__plugin__plugin__spotube_plugin_dispose_impl(port, ptr, rust_vec_len, data_len), + 3 => wire__crate__api__plugin__plugin__SpotubePlugin_auth_state_impl(port, ptr, rust_vec_len, data_len), +24 => wire__crate__api__plugin__plugin__SpotubePlugin_close_impl(port, ptr, rust_vec_len, data_len), +25 => wire__crate__api__plugin__plugin__SpotubePlugin_create_context_impl(port, ptr, rust_vec_len, data_len), +27 => wire__crate__api__init_app_impl(port, ptr, rust_vec_len, data_len), +28 => wire__crate__api__plugin__senders__plugin_album_sender_get_album_impl(port, ptr, rust_vec_len, data_len), +29 => wire__crate__api__plugin__senders__plugin_album_sender_releases_impl(port, ptr, rust_vec_len, data_len), +30 => wire__crate__api__plugin__senders__plugin_album_sender_save_impl(port, ptr, rust_vec_len, data_len), +31 => wire__crate__api__plugin__senders__plugin_album_sender_tracks_impl(port, ptr, rust_vec_len, data_len), +32 => wire__crate__api__plugin__senders__plugin_album_sender_unsave_impl(port, ptr, rust_vec_len, data_len), +33 => wire__crate__api__plugin__senders__plugin_artist_sender_albums_impl(port, ptr, rust_vec_len, data_len), +34 => wire__crate__api__plugin__senders__plugin_artist_sender_get_artist_impl(port, ptr, rust_vec_len, data_len), +35 => wire__crate__api__plugin__senders__plugin_artist_sender_related_impl(port, ptr, rust_vec_len, data_len), +36 => wire__crate__api__plugin__senders__plugin_artist_sender_save_impl(port, ptr, rust_vec_len, data_len), +37 => wire__crate__api__plugin__senders__plugin_artist_sender_top_tracks_impl(port, ptr, rust_vec_len, data_len), +38 => wire__crate__api__plugin__senders__plugin_artist_sender_unsave_impl(port, ptr, rust_vec_len, data_len), +39 => wire__crate__api__plugin__senders__plugin_audio_source_sender_matches_impl(port, ptr, rust_vec_len, data_len), +40 => wire__crate__api__plugin__senders__plugin_audio_source_sender_streams_impl(port, ptr, rust_vec_len, data_len), +41 => wire__crate__api__plugin__senders__plugin_auth_sender_authenticate_impl(port, ptr, rust_vec_len, data_len), +42 => wire__crate__api__plugin__senders__plugin_auth_sender_is_authenticated_impl(port, ptr, rust_vec_len, data_len), +43 => wire__crate__api__plugin__senders__plugin_auth_sender_logout_impl(port, ptr, rust_vec_len, data_len), +44 => wire__crate__api__plugin__senders__plugin_browse_sender_section_items_impl(port, ptr, rust_vec_len, data_len), +45 => wire__crate__api__plugin__senders__plugin_browse_sender_sections_impl(port, ptr, rust_vec_len, data_len), +46 => wire__crate__api__plugin__models__core__plugin_configuration_slug_impl(port, ptr, rust_vec_len, data_len), +47 => wire__crate__api__plugin__senders__plugin_core_sender_check_update_impl(port, ptr, rust_vec_len, data_len), +48 => wire__crate__api__plugin__senders__plugin_core_sender_scrobble_impl(port, ptr, rust_vec_len, data_len), +49 => wire__crate__api__plugin__senders__plugin_core_sender_support_impl(port, ptr, rust_vec_len, data_len), +50 => wire__crate__api__plugin__senders__plugin_playlist_sender_add_tracks_impl(port, ptr, rust_vec_len, data_len), +51 => wire__crate__api__plugin__senders__plugin_playlist_sender_create_playlist_impl(port, ptr, rust_vec_len, data_len), +52 => wire__crate__api__plugin__senders__plugin_playlist_sender_delete_playlist_impl(port, ptr, rust_vec_len, data_len), +53 => wire__crate__api__plugin__senders__plugin_playlist_sender_get_playlist_impl(port, ptr, rust_vec_len, data_len), +54 => wire__crate__api__plugin__senders__plugin_playlist_sender_remove_tracks_impl(port, ptr, rust_vec_len, data_len), +55 => wire__crate__api__plugin__senders__plugin_playlist_sender_save_impl(port, ptr, rust_vec_len, data_len), +56 => wire__crate__api__plugin__senders__plugin_playlist_sender_tracks_impl(port, ptr, rust_vec_len, data_len), +57 => wire__crate__api__plugin__senders__plugin_playlist_sender_unsave_impl(port, ptr, rust_vec_len, data_len), +58 => wire__crate__api__plugin__senders__plugin_playlist_sender_update_playlist_impl(port, ptr, rust_vec_len, data_len), +59 => wire__crate__api__plugin__senders__plugin_search_sender_albums_impl(port, ptr, rust_vec_len, data_len), +60 => wire__crate__api__plugin__senders__plugin_search_sender_all_impl(port, ptr, rust_vec_len, data_len), +61 => wire__crate__api__plugin__senders__plugin_search_sender_artists_impl(port, ptr, rust_vec_len, data_len), +62 => wire__crate__api__plugin__senders__plugin_search_sender_chips_impl(port, ptr, rust_vec_len, data_len), +63 => wire__crate__api__plugin__senders__plugin_search_sender_playlists_impl(port, ptr, rust_vec_len, data_len), +64 => wire__crate__api__plugin__senders__plugin_search_sender_tracks_impl(port, ptr, rust_vec_len, data_len), +65 => wire__crate__api__plugin__senders__plugin_track_sender_get_track_impl(port, ptr, rust_vec_len, data_len), +66 => wire__crate__api__plugin__senders__plugin_track_sender_radio_impl(port, ptr, rust_vec_len, data_len), +67 => wire__crate__api__plugin__senders__plugin_track_sender_save_impl(port, ptr, rust_vec_len, data_len), +68 => wire__crate__api__plugin__senders__plugin_track_sender_unsave_impl(port, ptr, rust_vec_len, data_len), +69 => wire__crate__api__plugin__senders__plugin_user_sender_me_impl(port, ptr, rust_vec_len, data_len), +70 => wire__crate__api__plugin__senders__plugin_user_sender_saved_albums_impl(port, ptr, rust_vec_len, data_len), +71 => wire__crate__api__plugin__senders__plugin_user_sender_saved_artists_impl(port, ptr, rust_vec_len, data_len), +72 => wire__crate__api__plugin__senders__plugin_user_sender_saved_playlists_impl(port, ptr, rust_vec_len, data_len), +73 => wire__crate__api__plugin__senders__plugin_user_sender_saved_tracks_impl(port, ptr, rust_vec_len, data_len), +75 => wire__crate__api__plugin__models__audio_source__spotube_audio_lossy_container_quality_to_string_fmt_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -3774,10 +4884,29 @@ fn pde_ffi_dispatcher_sync_impl( match func_id { 1 => wire__crate__api__plugin__plugin__OpaqueSender_auto_accessor_get_sender_impl(ptr, rust_vec_len, data_len), 2 => wire__crate__api__plugin__plugin__OpaqueSender_auto_accessor_set_sender_impl(ptr, rust_vec_len, data_len), -50 => wire__crate__api__plugin__models__audio_source__spotube_audio_lossless_container_quality_to_string_fmt_impl(ptr, rust_vec_len, data_len), -52 => wire__crate__api__plugin__models__audio_source__spotube_audio_source_container_preset_file_extension_impl(ptr, rust_vec_len, data_len), -54 => wire__crate__api__plugin__plugin__spotube_plugin_new_impl(ptr, rust_vec_len, data_len), -55 => wire__crate__api__plugin__plugin__spotube_plugin_new_context_impl(ptr, rust_vec_len, data_len), +4 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_album_impl(ptr, rust_vec_len, data_len), +5 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_artist_impl(ptr, rust_vec_len, data_len), +6 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_audio_source_impl(ptr, rust_vec_len, data_len), +7 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_auth_impl(ptr, rust_vec_len, data_len), +8 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_browse_impl(ptr, rust_vec_len, data_len), +9 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_core_impl(ptr, rust_vec_len, data_len), +10 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_playlist_impl(ptr, rust_vec_len, data_len), +11 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_search_impl(ptr, rust_vec_len, data_len), +12 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_track_impl(ptr, rust_vec_len, data_len), +13 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_get_user_impl(ptr, rust_vec_len, data_len), +14 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_album_impl(ptr, rust_vec_len, data_len), +15 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_artist_impl(ptr, rust_vec_len, data_len), +16 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_audio_source_impl(ptr, rust_vec_len, data_len), +17 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_auth_impl(ptr, rust_vec_len, data_len), +18 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_browse_impl(ptr, rust_vec_len, data_len), +19 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_core_impl(ptr, rust_vec_len, data_len), +20 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_playlist_impl(ptr, rust_vec_len, data_len), +21 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_search_impl(ptr, rust_vec_len, data_len), +22 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_track_impl(ptr, rust_vec_len, data_len), +23 => wire__crate__api__plugin__plugin__SpotubePlugin_auto_accessor_set_user_impl(ptr, rust_vec_len, data_len), +26 => wire__crate__api__plugin__plugin__SpotubePlugin_new_impl(ptr, rust_vec_len, data_len), +74 => wire__crate__api__plugin__models__audio_source__spotube_audio_lossless_container_quality_to_string_fmt_impl(ptr, rust_vec_len, data_len), +76 => wire__crate__api__plugin__models__audio_source__spotube_audio_source_container_preset_file_extension_impl(ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -3834,6 +4963,60 @@ impl flutter_rust_bridge::IntoIntoDart>> } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper {} + +impl flutter_rust_bridge::IntoIntoDart> for SpotubePlugin { + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} + +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::api::plugin::models::auth::AuthEventObject { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [self.event_type.into_into_dart().into_dart()].into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::api::plugin::models::auth::AuthEventObject +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::api::plugin::models::auth::AuthEventObject +{ + fn into_into_dart(self) -> crate::api::plugin::models::auth::AuthEventObject { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::api::plugin::models::auth::AuthEventType { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + Self::Login => 0.into_dart(), + Self::RefreshSession => 1.into_dart(), + Self::Logout => 2.into_dart(), + _ => unreachable!(), + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::api::plugin::models::auth::AuthEventType +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::api::plugin::models::auth::AuthEventType +{ + fn into_into_dart(self) -> crate::api::plugin::models::auth::AuthEventType { + self + } +} // Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::api::plugin::models::core::PluginAbility { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { @@ -4610,35 +5793,6 @@ impl } } // Codec=Dco (DartCObject based), see doc to use other codecs -impl flutter_rust_bridge::IntoDart for crate::api::plugin::plugin::SpotubePlugin { - fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { - [ - self.artist.into_into_dart().into_dart(), - self.album.into_into_dart().into_dart(), - self.audio_source.into_into_dart().into_dart(), - self.auth.into_into_dart().into_dart(), - self.browse.into_into_dart().into_dart(), - self.core.into_into_dart().into_dart(), - self.playlist.into_into_dart().into_dart(), - self.search.into_into_dart().into_dart(), - self.track.into_into_dart().into_dart(), - self.user.into_into_dart().into_dart(), - ] - .into_dart() - } -} -impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive - for crate::api::plugin::plugin::SpotubePlugin -{ -} -impl flutter_rust_bridge::IntoIntoDart - for crate::api::plugin::plugin::SpotubePlugin -{ - fn into_into_dart(self) -> crate::api::plugin::plugin::SpotubePlugin { - self - } -} -// Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::api::plugin::models::search::SpotubeSearchResponseObject { @@ -4836,6 +5990,13 @@ impl SseEncode for Sender { } } +impl SseEncode for SpotubePlugin { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); + } +} + impl SseEncode for RustOpaqueMoi> { @@ -4871,6 +6032,29 @@ impl SseEncode } } +impl SseEncode + for RustOpaqueMoi> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + +impl SseEncode + for StreamSink< + crate::api::plugin::models::auth::AuthEventObject, + flutter_rust_bridge::for_generated::SseCodec, + > +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + unimplemented!("") + } +} + impl SseEncode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -4878,6 +6062,30 @@ impl SseEncode for String { } } +impl SseEncode for crate::api::plugin::models::auth::AuthEventObject { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.event_type, serializer); + } +} + +impl SseEncode for crate::api::plugin::models::auth::AuthEventType { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode( + match self { + crate::api::plugin::models::auth::AuthEventType::Login => 0, + crate::api::plugin::models::auth::AuthEventType::RefreshSession => 1, + crate::api::plugin::models::auth::AuthEventType::Logout => 2, + _ => { + unimplemented!(""); + } + }, + serializer, + ); + } +} + impl SseEncode for bool { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -5590,25 +6798,6 @@ crate::api::plugin::models::pagination::SpotubePaginationResponseObjectItem::Bro } } -impl SseEncode for crate::api::plugin::plugin::SpotubePlugin { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - ::sse_encode(self.artist, serializer); - ::sse_encode(self.album, serializer); - ::sse_encode( - self.audio_source, - serializer, - ); - ::sse_encode(self.auth, serializer); - ::sse_encode(self.browse, serializer); - ::sse_encode(self.core, serializer); - ::sse_encode(self.playlist, serializer); - ::sse_encode(self.search, serializer); - ::sse_encode(self.track, serializer); - ::sse_encode(self.user, serializer); - } -} - impl SseEncode for crate::api::plugin::models::search::SpotubeSearchResponseObject { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -5819,6 +7008,20 @@ mod io { ) { MoiArc::>>::decrement_strong_count(ptr as _); } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_spotube_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_spotube_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSpotubePlugin( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } } #[cfg(not(target_family = "wasm"))] pub use io::*; diff --git a/rust/src/internal/core.rs b/rust/src/internal/core.rs index 0f4917a2..99d04170 100644 --- a/rust/src/internal/core.rs +++ b/rust/src/internal/core.rs @@ -2,7 +2,6 @@ use crate::api::plugin::models::core::{ PluginConfiguration, PluginUpdateAvailable, ScrobbleDetails, }; use crate::internal::utils::{js_invoke_async_method_to_json, js_invoke_method_to_json}; -use anyhow::anyhow; use flutter_rust_bridge::frb; use rquickjs::{async_with, AsyncContext}; diff --git a/rust/src/internal/mod.rs b/rust/src/internal/mod.rs index 965413d8..7f9fccea 100644 --- a/rust/src/internal/mod.rs +++ b/rust/src/internal/mod.rs @@ -9,5 +9,5 @@ pub mod search; pub mod track; pub mod user; pub mod auth; -mod utils; +pub(crate) mod utils; // Export Context diff --git a/rust/src/internal/utils.rs b/rust/src/internal/utils.rs index 4e6aa92a..192eabeb 100644 --- a/rust/src/internal/utils.rs +++ b/rust/src/internal/utils.rs @@ -1,8 +1,8 @@ use anyhow::anyhow; use rquickjs::function::Args; -use rquickjs::{Array, CatchResultExt, Ctx, Filter, FromJs, Function, IntoJs, Object, Promise}; +use rquickjs::{Array, CatchResultExt, Ctx, Filter, Function, IntoJs, Object, Promise}; use serde::de::DeserializeOwned; -use serde::{Deserialize, Deserializer, Serialize}; +use serde::Serialize; use serde_json::{Map, Value}; use std::collections::HashMap; @@ -120,7 +120,7 @@ where .map_err(|e| anyhow!("{e}"))?; let js_fn: Function<'b> = core_val.get(name).map_err(|e| anyhow!("{e}"))?; let mut args_js = Args::new(ctx.clone(), args.len() as usize); - for (i, arg) in args.iter().enumerate() { + for arg in args.iter() { let arg_value = serde_json::to_value(arg).map_err(|e| anyhow!("{e}"))?; let arg_js = json_value_to_js(&arg_value, ctx.clone()).map_err(|e| anyhow!("{e}"))?; args_js.push_arg(arg_js).map_err(|e| anyhow!("{e}"))?; @@ -161,7 +161,7 @@ where .map_err(|e| anyhow!("{e}"))?; let js_fn: Function<'b> = core_val.get(name).map_err(|e| anyhow!("{e}"))?; let mut args_js = Args::new(ctx.clone(), args.len() as usize); - for (i, arg) in args.iter().enumerate() { + for arg in args.iter().enumerate() { let arg_value = serde_json::to_value(arg).map_err(|e| anyhow!("{e}"))?; let arg_js = json_value_to_js(&arg_value, ctx.clone()).map_err(|e| anyhow!("{e}"))?; args_js.push_arg(arg_js).map_err(|e| anyhow!("{e}"))?; diff --git a/rust/src/main.rs b/rust/src/main.rs index 59b18624..1781ebae 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -1,5 +1,6 @@ mod api; mod internal; +mod frb_generated; use rquickjs::function::{Async, Func}; use rquickjs::{async_with, AsyncContext, AsyncRuntime, Function, Object, Promise}; @@ -67,9 +68,7 @@ function sleep(ms) { class Core { async checkUpdate() { console.log('Core checkUpdate'); - const response = await fetch('https://api.github.com/repos/KRTirtho/spotube/releases/latest'); - const data = await response.json(); - console.log(data); + await sleep(1000); console.log('No update available'); } support() { @@ -77,9 +76,12 @@ class Core { } } +class Auth {} + class TestingPlugin { constructor() { this.core = new Core(); + this.auth = new Auth(); } } "; @@ -98,7 +100,7 @@ async fn plugin() -> anyhow::Result<()> { repository: None, version: "0.1.0".to_string(), }; - let sender = SpotubePlugin::new_context(PLUGIN_JS.to_string(), config.clone())?; + let sender = plugin.create_context(PLUGIN_JS.to_string(), config.clone())?; let (r1, r2) = tokio::join!( plugin.core.check_update(sender.clone(), config.clone()), plugin.core.check_update(sender.clone(), config.clone())