feat(core): update device logs structure
CI / format (push) Has been cancelled
CI / test (push) Has been cancelled
CI / packaging (push) Has been cancelled

This commit is contained in:
Tien Do Nam
2026-08-04 15:23:44 +02:00
parent 44f19f4e70
commit 966543da6a
8 changed files with 561 additions and 133 deletions
+2 -1
View File
@@ -1,7 +1,8 @@
mod store; mod store;
pub use store::{ pub use store::{
ChannelStatus, DeviceChannel, DeviceLog, DiscoveredDevice, HttpChannel, StatefulDevice, ChannelStatus, DeviceChannel, DeviceLog, DeviceLogKind, DiscoveredDevice, HttpChannel,
StatefulDevice,
}; };
use crate::http::client::{ClientError, LsHttpClientV2}; use crate::http::client::{ClientError, LsHttpClientV2};
+33 -32
View File
@@ -66,11 +66,27 @@ pub enum ChannelStatus {
NotReachable, NotReachable,
} }
/// A [`DiscoveryEvent`] that affected a device, with the time it happened. /// A confirmation of a device, as retained on it for display.
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct DeviceLog { pub struct DeviceLog {
pub timestamp: SystemTime, pub timestamp: SystemTime,
pub event: DiscoveryEvent,
/// Whether the confirmation discovered the device or re-confirmed it.
pub kind: DeviceLogKind,
/// The channel the confirmation happened on.
pub channel: DeviceChannel,
}
/// What a logged confirmation meant for the device, mirroring the
/// [`DiscoveryEvent`] variants.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum DeviceLogKind {
/// The device entered the store.
Discovered,
/// An already known device was confirmed again.
Updated,
} }
impl StatefulDevice { impl StatefulDevice {
@@ -93,11 +109,7 @@ impl StatefulDevice {
/// The position of the channel's most recent confirmation in the logs; /// The position of the channel's most recent confirmation in the logs;
/// `None` when its confirmations have been dropped from the log cap. /// `None` when its confirmations have been dropped from the log cap.
fn last_confirmed(&self, channel: &DeviceChannel) -> Option<usize> { fn last_confirmed(&self, channel: &DeviceChannel) -> Option<usize> {
self.logs.iter().rposition(|log| { self.logs.iter().rposition(|log| log.channel == *channel)
let (DiscoveryEvent::Discovered { device } | DiscoveryEvent::Updated { device }) =
&log.event;
device.channel == *channel
})
} }
} }
@@ -192,10 +204,6 @@ impl DeviceStore {
.find(|known| known.device.fingerprint == device.fingerprint) .find(|known| known.device.fingerprint == device.fingerprint)
{ {
Some(known) => { Some(known) => {
let event = DiscoveryEvent::Updated {
device: device.clone(),
};
known known
.channels .channels
.retain(|channel, _| !channel.same_endpoint(&device.channel)); .retain(|channel, _| !channel.same_endpoint(&device.channel));
@@ -205,30 +213,32 @@ impl DeviceStore {
known.logs.push(DeviceLog { known.logs.push(DeviceLog {
timestamp, timestamp,
event: event.clone(), kind: DeviceLogKind::Updated,
channel: device.channel.clone(),
}); });
if known.logs.len() > MAX_LOGS { if known.logs.len() > MAX_LOGS {
let excess = known.logs.len() - MAX_LOGS; let excess = known.logs.len() - MAX_LOGS;
known.logs.drain(..excess); known.logs.drain(..excess);
} }
let event = DiscoveryEvent::Updated {
device: device.clone(),
};
known.device = device; known.device = device;
(event, known.clone()) (event, known.clone())
} }
None => { None => {
let event = DiscoveryEvent::Discovered {
device: device.clone(),
};
let known = StatefulDevice { let known = StatefulDevice {
channels: HashMap::from([(device.channel.clone(), ChannelStatus::Available)]), channels: HashMap::from([(device.channel.clone(), ChannelStatus::Available)]),
device,
logs: vec![DeviceLog { logs: vec![DeviceLog {
timestamp, timestamp,
event: event.clone(), kind: DeviceLogKind::Discovered,
channel: device.channel.clone(),
}], }],
device: device.clone(),
}; };
devices.push(known.clone()); devices.push(known.clone());
(event, known) (DiscoveryEvent::Discovered { device }, known)
} }
} }
} }
@@ -272,13 +282,10 @@ mod tests {
channel.http().unwrap().host.as_str() channel.http().unwrap().host.as_str()
} }
/// The marker telling log entries apart: the host the logged snapshot /// The marker telling log entries apart: the host the confirmation
/// was confirmed on. /// happened on.
fn log_marker(log: &DeviceLog) -> &str { fn log_marker(log: &DeviceLog) -> &str {
let device = match &log.event { log.channel.http().unwrap().host.as_str()
DiscoveryEvent::Discovered { device } | DiscoveryEvent::Updated { device } => device,
};
device.http().unwrap().host.as_str()
} }
#[test] #[test]
@@ -303,14 +310,8 @@ mod tests {
let known = store.by_fingerprint("a").unwrap(); let known = store.by_fingerprint("a").unwrap();
assert_eq!(known.logs.len(), 2, "every confirmation must be logged"); assert_eq!(known.logs.len(), 2, "every confirmation must be logged");
assert!(matches!( assert_eq!(known.logs[0].kind, DeviceLogKind::Discovered);
known.logs[0].event, assert_eq!(known.logs[1].kind, DeviceLogKind::Updated);
DiscoveryEvent::Discovered { .. }
));
assert!(matches!(
known.logs[1].event,
DiscoveryEvent::Updated { .. }
));
assert_eq!(log_marker(&known.logs[1]), "fe80::1%3"); assert_eq!(log_marker(&known.logs[1]), "fe80::1%3");
} }
@@ -7,7 +7,7 @@ import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'package:localsend_isolates/rust/api/model.dart'; import 'package:localsend_isolates/rust/api/model.dart';
import 'package:localsend_isolates/rust/frb_generated.dart'; import 'package:localsend_isolates/rust/frb_generated.dart';
// These functions are ignored because they are not marked as `pub`: `rs_stored_device`, `stop` // These functions are ignored because they are not marked as `pub`: `rs_device_log`, `rs_stored_device`, `stop`
// These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `DiscoveryInstance` // These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `DiscoveryInstance`
/// Starts the discovery: binds the UDP multicast sockets on all usable /// Starts the discovery: binds the UDP multicast sockets on all usable
@@ -79,6 +79,10 @@ abstract class RsDiscovery implements RustOpaqueInterface {
/// multicast is unavailable. /// multicast is unavailable.
Future<void> announce(); Future<void> announce();
/// The retained confirmations of a stored device, oldest first, capped at
/// the store's log limit. Empty when the fingerprint is unknown.
Future<List<RsDeviceLog>> deviceLogs({required String fingerprint});
/// Discovers a device at a known address, e.g. a favorite or a peer that /// Discovers a device at a known address, e.g. a favorite or a peer that
/// multicast does not reach, by sending it a register request. /// multicast does not reach, by sending it a register request.
/// ///
@@ -121,6 +125,11 @@ abstract class RsDiscovery implements RustOpaqueInterface {
Future<void> stop(); Future<void> stop();
} }
enum DeviceLogKind {
discovered,
updated,
}
/// An address a stored device was confirmed on and is dialed at. /// An address a stored device was confirmed on and is dialed at.
class RsDeviceChannel { class RsDeviceChannel {
/// The host to dial: an IP address, or the scoped form `fe80::1%3` for /// The host to dial: an IP address, or the scoped form `fe80::1%3` for
@@ -146,6 +155,36 @@ class RsDeviceChannel {
other is RsDeviceChannel && runtimeType == other.runtimeType && host == other.host && port == other.port && protocol == other.protocol; other is RsDeviceChannel && runtimeType == other.runtimeType && host == other.host && port == other.port && protocol == other.protocol;
} }
/// One retained confirmation of a stored device, for the device details UI.
class RsDeviceLog {
/// When the confirmation happened, in milliseconds since the Unix epoch.
final BigInt timestampMillis;
/// Whether the confirmation discovered the device or re-confirmed it.
final DeviceLogKind kind;
/// The channel the confirmation happened on.
final RsDeviceChannel channel;
const RsDeviceLog({
required this.timestampMillis,
required this.kind,
required this.channel,
});
@override
int get hashCode => timestampMillis.hashCode ^ kind.hashCode ^ channel.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is RsDeviceLog &&
runtimeType == other.runtimeType &&
timestampMillis == other.timestampMillis &&
kind == other.kind &&
channel == other.channel;
}
/// A single device confirmation over HTTP, fed into the store via /// A single device confirmation over HTTP, fed into the store via
/// [RsDiscovery::add_device]: the device's register request was accepted by /// [RsDiscovery::add_device]: the device's register request was accepted by
/// our server, so it is known to be reachable at [RsDiscoveredDevice::host]. /// our server, so it is known to be reachable at [RsDiscoveredDevice::host].
@@ -75,7 +75,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
String get codegenVersion => '2.12.0'; String get codegenVersion => '2.12.0';
@override @override
int get rustContentHash => -1120530143; int get rustContentHash => -2095161624;
static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig(
stem: 'rust_lib_localsend_app', stem: 'rust_lib_localsend_app',
@@ -117,6 +117,8 @@ abstract class RustLibApi extends BaseApi {
Future<void> crateApiDiscoveryRsDiscoveryAnnounce({required RsDiscovery that}); Future<void> crateApiDiscoveryRsDiscoveryAnnounce({required RsDiscovery that});
Future<List<RsDeviceLog>> crateApiDiscoveryRsDiscoveryDeviceLogs({required RsDiscovery that, required String fingerprint});
Future<RsStoredDevice?> crateApiDiscoveryRsDiscoveryDiscover({ Future<RsStoredDevice?> crateApiDiscoveryRsDiscoveryDiscover({
required RsDiscovery that, required RsDiscovery that,
required String host, required String host,
@@ -613,6 +615,32 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
argNames: ['that'], argNames: ['that'],
); );
@override
Future<List<RsDeviceLog>> crateApiDiscoveryRsDiscoveryDeviceLogs({required RsDiscovery that, required String fingerprint}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer);
sse_encode_String(fingerprint, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 9, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_rs_device_log,
decodeErrorData: null,
),
constMeta: kCrateApiDiscoveryRsDiscoveryDeviceLogsConstMeta,
argValues: [that, fingerprint],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiDiscoveryRsDiscoveryDeviceLogsConstMeta => const TaskConstMeta(
debugName: 'RsDiscovery_device_logs',
argNames: ['that', 'fingerprint'],
);
@override @override
Future<RsStoredDevice?> crateApiDiscoveryRsDiscoveryDiscover({ Future<RsStoredDevice?> crateApiDiscoveryRsDiscoveryDiscover({
required RsDiscovery that, required RsDiscovery that,
@@ -628,7 +656,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(host, serializer); sse_encode_String(host, serializer);
sse_encode_u_16(port, serializer); sse_encode_u_16(port, serializer);
sse_encode_protocol_type(protocol, serializer); sse_encode_protocol_type(protocol, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 9, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 10, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_opt_box_autoadd_rs_stored_device, decodeSuccessData: sse_decode_opt_box_autoadd_rs_stored_device,
@@ -656,7 +684,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer);
sse_encode_StreamSink_rs_stored_device_Sse(sink, serializer); sse_encode_StreamSink_rs_stored_device_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 10, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 11, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -683,7 +711,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 11, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 12, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_opt_String, decodeSuccessData: sse_decode_opt_String,
@@ -716,7 +744,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(interfaceIp, serializer); sse_encode_String(interfaceIp, serializer);
sse_encode_u_16(port, serializer); sse_encode_u_16(port, serializer);
sse_encode_protocol_type(protocol, serializer); sse_encode_protocol_type(protocol, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 12, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 13, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -742,7 +770,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer);
sse_encode_bool(answer, serializer); sse_encode_bool(answer, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 13, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -767,7 +795,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 15, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -802,7 +830,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(ip, serializer); sse_encode_String(ip, serializer);
sse_encode_u_16(port, serializer); sse_encode_u_16(port, serializer);
sse_encode_String(sessionId, serializer); sse_encode_String(sessionId, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 15, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 16, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -843,7 +871,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_opt_String(publicKey, serializer); sse_encode_opt_String(publicKey, serializer);
sse_encode_opt_String(pin, serializer); sse_encode_opt_String(pin, serializer);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken(cancelToken, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken(cancelToken, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 16, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 17, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_prepare_upload_result, decodeSuccessData: sse_decode_prepare_upload_result,
@@ -878,7 +906,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(ip, serializer); sse_encode_String(ip, serializer);
sse_encode_u_16(port, serializer); sse_encode_u_16(port, serializer);
sse_encode_box_autoadd_register_dto(payload, serializer); sse_encode_box_autoadd_register_dto(payload, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 17, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 18, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_result_with_public_key_register_response_dto, decodeSuccessData: sse_decode_result_with_public_key_register_response_dto,
@@ -935,7 +963,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer); sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer);
sse_encode_u_64(contentLength, serializer); sse_encode_u_64(contentLength, serializer);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken(cancelToken, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken(cancelToken, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 18, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 19, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -978,7 +1006,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
sse_encode_String(sessionId, serializer); sse_encode_String(sessionId, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 19, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 20, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1005,7 +1033,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
sse_encode_String(sessionId, serializer); sse_encode_String(sessionId, serializer);
sse_encode_String(fileId, serializer); sse_encode_String(fileId, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 20, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 21, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1032,7 +1060,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
sse_encode_String(sessionId, serializer); sse_encode_String(sessionId, serializer);
sse_encode_String(fileId, serializer); sse_encode_String(fileId, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 21, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 22, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1060,7 +1088,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
sse_encode_StreamSink_rs_server_event_Sse(sink, serializer); sse_encode_StreamSink_rs_server_event_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 22, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 23, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1097,7 +1125,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(fileId, serializer); sse_encode_String(fileId, serializer);
sse_encode_opt_String(path, serializer); sse_encode_opt_String(path, serializer);
sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer); sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 23, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 24, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1137,7 +1165,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_opt_String(path, serializer); sse_encode_opt_String(path, serializer);
sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer); sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer);
sse_encode_u_64(fileSize, serializer); sse_encode_u_64(fileSize, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 24, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 25, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1166,7 +1194,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
sse_encode_String(sessionId, serializer); sse_encode_String(sessionId, serializer);
sse_encode_bool(accept, serializer); sse_encode_bool(accept, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 25, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 26, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1192,7 +1220,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
sse_encode_opt_list_String(acceptedFileIds, serializer); sse_encode_opt_list_String(acceptedFileIds, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 26, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 27, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1217,7 +1245,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 27, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 28, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1242,7 +1270,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileReceiver(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileReceiver(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 28, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 29, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_String, decodeSuccessData: sse_decode_String,
@@ -1270,7 +1298,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileReceiver(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileReceiver(that, serializer);
sse_encode_StreamSink_list_prim_u_8_strict_Sse(sink, serializer); sse_encode_StreamSink_list_prim_u_8_strict_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 29, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 30, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1298,7 +1326,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileSender(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileSender(that, serializer);
sse_encode_list_prim_u_8_loose(data, serializer); sse_encode_list_prim_u_8_loose(data, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 30, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 31, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1323,7 +1351,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 31, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 32, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1351,7 +1379,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
sse_encode_StreamSink_rtc_file_error_Sse(sink, serializer); sse_encode_StreamSink_rtc_file_error_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 32, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 33, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1378,7 +1406,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 33, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 34, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_list_file_dto, decodeSuccessData: sse_decode_list_file_dto,
@@ -1406,7 +1434,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
sse_encode_StreamSink_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileReceiver_Sse(sink, serializer); sse_encode_StreamSink_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileReceiver_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 34, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 35, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1436,7 +1464,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
sse_encode_StreamSink_rtc_status_Sse(sink, serializer); sse_encode_StreamSink_rtc_status_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 35, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 36, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1464,7 +1492,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
sse_encode_box_autoadd_rtc_send_file_response(status, serializer); sse_encode_box_autoadd_rtc_send_file_response(status, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 36, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 37, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1490,7 +1518,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
sse_encode_String(pin, serializer); sse_encode_String(pin, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 37, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 38, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1516,7 +1544,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCReceiveController(that, serializer);
sse_encode_Set_String_None(selection, serializer); sse_encode_Set_String_None(selection, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 38, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 39, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1544,7 +1572,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer); sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer);
sse_encode_StreamSink_rtc_file_error_Sse(sink, serializer); sse_encode_StreamSink_rtc_file_error_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 39, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 40, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1571,7 +1599,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 40, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 41, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_Set_String_None, decodeSuccessData: sse_decode_Set_String_None,
@@ -1599,7 +1627,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer); sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer);
sse_encode_StreamSink_rtc_status_Sse(sink, serializer); sse_encode_StreamSink_rtc_status_Sse(sink, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 41, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 42, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1627,7 +1655,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer);
sse_encode_String(fileId, serializer); sse_encode_String(fileId, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 42, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 43, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileSender, decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCFileSender,
@@ -1653,7 +1681,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRTCSendController(that, serializer);
sse_encode_String(pin, serializer); sse_encode_String(pin, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 43, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 44, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1692,7 +1720,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
onConnection, onConnection,
serializer, serializer,
); );
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 44, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 45, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1718,7 +1746,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
SyncTask( SyncTask(
callFfi: () { callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 45)!; return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 46)!;
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken, decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken,
@@ -1753,7 +1781,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_ls_http_client_version(version, serializer); sse_encode_ls_http_client_version(version, serializer);
sse_encode_opt_String(expectedFingerprint, serializer); sse_encode_opt_String(expectedFingerprint, serializer);
sse_encode_opt_box_autoadd_u_32(timeoutMs, serializer); sse_encode_opt_box_autoadd_u_32(timeoutMs, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 46)!; return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 47)!;
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpClient, decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpClient,
@@ -1777,7 +1805,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
NormalTask( NormalTask(
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 47, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 48, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: decodeSuccessData:
@@ -1802,7 +1830,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
NormalTask( NormalTask(
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 48, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 49, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1826,7 +1854,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
NormalTask( NormalTask(
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 49, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 50, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_key_pair, decodeSuccessData: sse_decode_key_pair,
@@ -1850,7 +1878,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
NormalTask( NormalTask(
callFfi: (port_) { callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 50, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 51, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_security_context, decodeSuccessData: sse_decode_security_context,
@@ -1881,7 +1909,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer); sse_encode_opt_box_autoadd_i_32(fileDescriptor, serializer);
sse_encode_opt_list_prim_u_8_strict(bytes, serializer); sse_encode_opt_list_prim_u_8_strict(bytes, serializer);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken(cancelToken, serializer); sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsCancellationToken(cancelToken, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 51, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 52, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -1908,7 +1936,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: () { callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(name, serializer); sse_encode_String(name, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 52)!; return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 53)!;
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_bool, decodeSuccessData: sse_decode_bool,
@@ -1933,7 +1961,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: () { callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(name, serializer); sse_encode_String(name, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 53)!; return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 54)!;
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_String, decodeSuccessData: sse_decode_String,
@@ -1986,7 +2014,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(certPem, serializer); sse_encode_String(certPem, serializer);
sse_encode_String(privateKeyPem, serializer); sse_encode_String(privateKeyPem, serializer);
sse_encode_u_64(timeoutMs, serializer); sse_encode_u_64(timeoutMs, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 54, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 55, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery, decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsDiscovery,
@@ -2063,7 +2091,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_bool(verifyChecksums, serializer); sse_encode_bool(verifyChecksums, serializer);
sse_encode_opt_box_autoadd_web_params(web, serializer); sse_encode_opt_box_autoadd_web_params(web, serializer);
sse_encode_opt_String(showToken, serializer); sse_encode_opt_String(showToken, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 55, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 56, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer, decodeSuccessData: sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerRsHttpServer,
@@ -2089,7 +2117,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
final serializer = SseSerializer(generalizedFrbRustBinding); final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(cert, serializer); sse_encode_String(cert, serializer);
sse_encode_String(publicKey, serializer); sse_encode_String(publicKey, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 56, port: port_); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 57, port: port_);
}, },
codec: SseCodec( codec: SseCodec(
decodeSuccessData: sse_decode_unit, decodeSuccessData: sse_decode_unit,
@@ -2689,6 +2717,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
); );
} }
@protected
DeviceLogKind dco_decode_device_log_kind(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return DeviceLogKind.values[raw as int];
}
@protected @protected
DeviceType dco_decode_device_type(dynamic raw) { DeviceType dco_decode_device_type(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs // Codec=Dco (DartCObject based), see doc to use other codecs
@@ -2810,6 +2844,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return (raw as List<dynamic>).map(dco_decode_rs_device_channel).toList(); return (raw as List<dynamic>).map(dco_decode_rs_device_channel).toList();
} }
@protected
List<RsDeviceLog> dco_decode_list_rs_device_log(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return (raw as List<dynamic>).map(dco_decode_rs_device_log).toList();
}
@protected @protected
LsHttpClientVersion dco_decode_ls_http_client_version(dynamic raw) { LsHttpClientVersion dco_decode_ls_http_client_version(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs // Codec=Dco (DartCObject based), see doc to use other codecs
@@ -3086,6 +3126,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
); );
} }
@protected
RsDeviceLog dco_decode_rs_device_log(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
final arr = raw as List<dynamic>;
if (arr.length != 3) throw Exception('unexpected arr length: expect 3 but see ${arr.length}');
return RsDeviceLog(
timestampMillis: dco_decode_u_64(arr[0]),
kind: dco_decode_device_log_kind(arr[1]),
channel: dco_decode_rs_device_channel(arr[2]),
);
}
@protected @protected
RsDiscoveredDevice dco_decode_rs_discovered_device(dynamic raw) { RsDiscoveredDevice dco_decode_rs_discovered_device(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs // Codec=Dco (DartCObject based), see doc to use other codecs
@@ -3954,6 +4006,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ClientInfoWithoutId(alias: var_alias, version: var_version, deviceModel: var_deviceModel, deviceType: var_deviceType, token: var_token); return ClientInfoWithoutId(alias: var_alias, version: var_version, deviceModel: var_deviceModel, deviceType: var_deviceType, token: var_token);
} }
@protected
DeviceLogKind sse_decode_device_log_kind(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_i_32(deserializer);
return DeviceLogKind.values[inner];
}
@protected @protected
DeviceType sse_decode_device_type(SseDeserializer deserializer) { DeviceType sse_decode_device_type(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
@@ -4110,6 +4169,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ans_; return ans_;
} }
@protected
List<RsDeviceLog> sse_decode_list_rs_device_log(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var len_ = sse_decode_i_32(deserializer);
var ans_ = <RsDeviceLog>[];
for (var idx_ = 0; idx_ < len_; ++idx_) {
ans_.add(sse_decode_rs_device_log(deserializer));
}
return ans_;
}
@protected @protected
LsHttpClientVersion sse_decode_ls_http_client_version(SseDeserializer deserializer) { LsHttpClientVersion sse_decode_ls_http_client_version(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
@@ -4443,6 +4514,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return RsDeviceChannel(host: var_host, port: var_port, protocol: var_protocol); return RsDeviceChannel(host: var_host, port: var_port, protocol: var_protocol);
} }
@protected
RsDeviceLog sse_decode_rs_device_log(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var var_timestampMillis = sse_decode_u_64(deserializer);
var var_kind = sse_decode_device_log_kind(deserializer);
var var_channel = sse_decode_rs_device_channel(deserializer);
return RsDeviceLog(timestampMillis: var_timestampMillis, kind: var_kind, channel: var_channel);
}
@protected @protected
RsDiscoveredDevice sse_decode_rs_discovered_device(SseDeserializer deserializer) { RsDiscoveredDevice sse_decode_rs_discovered_device(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
@@ -5427,6 +5507,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_String(self.token, serializer); sse_encode_String(self.token, serializer);
} }
@protected
void sse_encode_device_log_kind(DeviceLogKind self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.index, serializer);
}
@protected @protected
void sse_encode_device_type(DeviceType self, SseSerializer serializer) { void sse_encode_device_type(DeviceType self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
@@ -5552,6 +5638,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
} }
} }
@protected
void sse_encode_list_rs_device_log(List<RsDeviceLog> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
for (final item in self) {
sse_encode_rs_device_log(item, serializer);
}
}
@protected @protected
void sse_encode_ls_http_client_version(LsHttpClientVersion self, SseSerializer serializer) { void sse_encode_ls_http_client_version(LsHttpClientVersion self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
@@ -5831,6 +5926,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_protocol_type(self.protocol, serializer); sse_encode_protocol_type(self.protocol, serializer);
} }
@protected
void sse_encode_rs_device_log(RsDeviceLog self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_u_64(self.timestampMillis, serializer);
sse_encode_device_log_kind(self.kind, serializer);
sse_encode_rs_device_channel(self.channel, serializer);
}
@protected @protected
void sse_encode_rs_discovered_device(RsDiscoveredDevice self, SseSerializer serializer) { void sse_encode_rs_discovered_device(RsDiscoveredDevice self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
@@ -6266,6 +6369,11 @@ class RsDiscoveryImpl extends RustOpaque implements RsDiscovery {
that: this, that: this,
); );
/// The retained confirmations of a stored device, oldest first, capped at
/// the store's log limit. Empty when the fingerprint is unknown.
Future<List<RsDeviceLog>> deviceLogs({required String fingerprint}) =>
RustLib.instance.api.crateApiDiscoveryRsDiscoveryDeviceLogs(that: this, fingerprint: fingerprint);
/// Discovers a device at a known address, e.g. a favorite or a peer that /// Discovers a device at a known address, e.g. a favorite or a peer that
/// multicast does not reach, by sending it a register request. /// multicast does not reach, by sending it a register request.
/// ///
@@ -300,6 +300,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
ClientInfoWithoutId dco_decode_client_info_without_id(dynamic raw); ClientInfoWithoutId dco_decode_client_info_without_id(dynamic raw);
@protected
DeviceLogKind dco_decode_device_log_kind(dynamic raw);
@protected @protected
DeviceType dco_decode_device_type(dynamic raw); DeviceType dco_decode_device_type(dynamic raw);
@@ -348,6 +351,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
List<RsDeviceChannel> dco_decode_list_rs_device_channel(dynamic raw); List<RsDeviceChannel> dco_decode_list_rs_device_channel(dynamic raw);
@protected
List<RsDeviceLog> dco_decode_list_rs_device_log(dynamic raw);
@protected @protected
LsHttpClientVersion dco_decode_ls_http_client_version(dynamic raw); LsHttpClientVersion dco_decode_ls_http_client_version(dynamic raw);
@@ -442,6 +448,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
RsDeviceChannel dco_decode_rs_device_channel(dynamic raw); RsDeviceChannel dco_decode_rs_device_channel(dynamic raw);
@protected
RsDeviceLog dco_decode_rs_device_log(dynamic raw);
@protected @protected
RsDiscoveredDevice dco_decode_rs_discovered_device(dynamic raw); RsDiscoveredDevice dco_decode_rs_discovered_device(dynamic raw);
@@ -767,6 +776,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
ClientInfoWithoutId sse_decode_client_info_without_id(SseDeserializer deserializer); ClientInfoWithoutId sse_decode_client_info_without_id(SseDeserializer deserializer);
@protected
DeviceLogKind sse_decode_device_log_kind(SseDeserializer deserializer);
@protected @protected
DeviceType sse_decode_device_type(SseDeserializer deserializer); DeviceType sse_decode_device_type(SseDeserializer deserializer);
@@ -815,6 +827,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
List<RsDeviceChannel> sse_decode_list_rs_device_channel(SseDeserializer deserializer); List<RsDeviceChannel> sse_decode_list_rs_device_channel(SseDeserializer deserializer);
@protected
List<RsDeviceLog> sse_decode_list_rs_device_log(SseDeserializer deserializer);
@protected @protected
LsHttpClientVersion sse_decode_ls_http_client_version(SseDeserializer deserializer); LsHttpClientVersion sse_decode_ls_http_client_version(SseDeserializer deserializer);
@@ -911,6 +926,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
RsDeviceChannel sse_decode_rs_device_channel(SseDeserializer deserializer); RsDeviceChannel sse_decode_rs_device_channel(SseDeserializer deserializer);
@protected
RsDeviceLog sse_decode_rs_device_log(SseDeserializer deserializer);
@protected @protected
RsDiscoveredDevice sse_decode_rs_discovered_device(SseDeserializer deserializer); RsDiscoveredDevice sse_decode_rs_discovered_device(SseDeserializer deserializer);
@@ -1281,6 +1299,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
void sse_encode_client_info_without_id(ClientInfoWithoutId self, SseSerializer serializer); void sse_encode_client_info_without_id(ClientInfoWithoutId self, SseSerializer serializer);
@protected
void sse_encode_device_log_kind(DeviceLogKind self, SseSerializer serializer);
@protected @protected
void sse_encode_device_type(DeviceType self, SseSerializer serializer); void sse_encode_device_type(DeviceType self, SseSerializer serializer);
@@ -1329,6 +1350,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
void sse_encode_list_rs_device_channel(List<RsDeviceChannel> self, SseSerializer serializer); void sse_encode_list_rs_device_channel(List<RsDeviceChannel> self, SseSerializer serializer);
@protected
void sse_encode_list_rs_device_log(List<RsDeviceLog> self, SseSerializer serializer);
@protected @protected
void sse_encode_ls_http_client_version(LsHttpClientVersion self, SseSerializer serializer); void sse_encode_ls_http_client_version(LsHttpClientVersion self, SseSerializer serializer);
@@ -1426,6 +1450,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
void sse_encode_rs_device_channel(RsDeviceChannel self, SseSerializer serializer); void sse_encode_rs_device_channel(RsDeviceChannel self, SseSerializer serializer);
@protected
void sse_encode_rs_device_log(RsDeviceLog self, SseSerializer serializer);
@protected @protected
void sse_encode_rs_discovered_device(RsDiscoveredDevice self, SseSerializer serializer); void sse_encode_rs_discovered_device(RsDiscoveredDevice self, SseSerializer serializer);
@@ -302,6 +302,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
ClientInfoWithoutId dco_decode_client_info_without_id(dynamic raw); ClientInfoWithoutId dco_decode_client_info_without_id(dynamic raw);
@protected
DeviceLogKind dco_decode_device_log_kind(dynamic raw);
@protected @protected
DeviceType dco_decode_device_type(dynamic raw); DeviceType dco_decode_device_type(dynamic raw);
@@ -350,6 +353,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
List<RsDeviceChannel> dco_decode_list_rs_device_channel(dynamic raw); List<RsDeviceChannel> dco_decode_list_rs_device_channel(dynamic raw);
@protected
List<RsDeviceLog> dco_decode_list_rs_device_log(dynamic raw);
@protected @protected
LsHttpClientVersion dco_decode_ls_http_client_version(dynamic raw); LsHttpClientVersion dco_decode_ls_http_client_version(dynamic raw);
@@ -444,6 +450,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
RsDeviceChannel dco_decode_rs_device_channel(dynamic raw); RsDeviceChannel dco_decode_rs_device_channel(dynamic raw);
@protected
RsDeviceLog dco_decode_rs_device_log(dynamic raw);
@protected @protected
RsDiscoveredDevice dco_decode_rs_discovered_device(dynamic raw); RsDiscoveredDevice dco_decode_rs_discovered_device(dynamic raw);
@@ -769,6 +778,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
ClientInfoWithoutId sse_decode_client_info_without_id(SseDeserializer deserializer); ClientInfoWithoutId sse_decode_client_info_without_id(SseDeserializer deserializer);
@protected
DeviceLogKind sse_decode_device_log_kind(SseDeserializer deserializer);
@protected @protected
DeviceType sse_decode_device_type(SseDeserializer deserializer); DeviceType sse_decode_device_type(SseDeserializer deserializer);
@@ -817,6 +829,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
List<RsDeviceChannel> sse_decode_list_rs_device_channel(SseDeserializer deserializer); List<RsDeviceChannel> sse_decode_list_rs_device_channel(SseDeserializer deserializer);
@protected
List<RsDeviceLog> sse_decode_list_rs_device_log(SseDeserializer deserializer);
@protected @protected
LsHttpClientVersion sse_decode_ls_http_client_version(SseDeserializer deserializer); LsHttpClientVersion sse_decode_ls_http_client_version(SseDeserializer deserializer);
@@ -913,6 +928,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
RsDeviceChannel sse_decode_rs_device_channel(SseDeserializer deserializer); RsDeviceChannel sse_decode_rs_device_channel(SseDeserializer deserializer);
@protected
RsDeviceLog sse_decode_rs_device_log(SseDeserializer deserializer);
@protected @protected
RsDiscoveredDevice sse_decode_rs_discovered_device(SseDeserializer deserializer); RsDiscoveredDevice sse_decode_rs_discovered_device(SseDeserializer deserializer);
@@ -1283,6 +1301,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
void sse_encode_client_info_without_id(ClientInfoWithoutId self, SseSerializer serializer); void sse_encode_client_info_without_id(ClientInfoWithoutId self, SseSerializer serializer);
@protected
void sse_encode_device_log_kind(DeviceLogKind self, SseSerializer serializer);
@protected @protected
void sse_encode_device_type(DeviceType self, SseSerializer serializer); void sse_encode_device_type(DeviceType self, SseSerializer serializer);
@@ -1331,6 +1352,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
void sse_encode_list_rs_device_channel(List<RsDeviceChannel> self, SseSerializer serializer); void sse_encode_list_rs_device_channel(List<RsDeviceChannel> self, SseSerializer serializer);
@protected
void sse_encode_list_rs_device_log(List<RsDeviceLog> self, SseSerializer serializer);
@protected @protected
void sse_encode_ls_http_client_version(LsHttpClientVersion self, SseSerializer serializer); void sse_encode_ls_http_client_version(LsHttpClientVersion self, SseSerializer serializer);
@@ -1428,6 +1452,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected @protected
void sse_encode_rs_device_channel(RsDeviceChannel self, SseSerializer serializer); void sse_encode_rs_device_channel(RsDeviceChannel self, SseSerializer serializer);
@protected
void sse_encode_rs_device_log(RsDeviceLog self, SseSerializer serializer);
@protected @protected
void sse_encode_rs_discovered_device(RsDiscoveredDevice self, SseSerializer serializer); void sse_encode_rs_discovered_device(RsDiscoveredDevice self, SseSerializer serializer);
@@ -1,6 +1,8 @@
use crate::frb_generated::StreamSink; use crate::frb_generated::StreamSink;
use flutter_rust_bridge::frb;
pub use localsend::discovery::DeviceLogKind;
use localsend::discovery::{ use localsend::discovery::{
DeviceChannel, DeviceIdentity, DiscoveredDevice, DiscoveryConfig, DiscoveryEvent, DeviceChannel, DeviceIdentity, DeviceLog, DiscoveredDevice, DiscoveryConfig, DiscoveryEvent,
DiscoveryHandle, HttpChannel, StatefulDevice, DiscoveryHandle, HttpChannel, StatefulDevice,
}; };
use localsend::model::discovery::{DeviceType, ProtocolType}; use localsend::model::discovery::{DeviceType, ProtocolType};
@@ -83,6 +85,24 @@ pub struct RsStoredDevice {
pub channels: Vec<RsDeviceChannel>, pub channels: Vec<RsDeviceChannel>,
} }
/// One retained confirmation of a stored device, for the device details UI.
pub struct RsDeviceLog {
/// When the confirmation happened, in milliseconds since the Unix epoch.
pub timestamp_millis: u64,
/// Whether the confirmation discovered the device or re-confirmed it.
pub kind: DeviceLogKind,
/// The channel the confirmation happened on.
pub channel: RsDeviceChannel,
}
#[frb(mirror(DeviceLogKind))]
pub enum _DeviceLogKind {
Discovered,
Updated,
}
pub struct RsDiscovery { pub struct RsDiscovery {
instance: Arc<DiscoveryInstance>, instance: Arc<DiscoveryInstance>,
event_rx: Mutex<Option<mpsc::Receiver<DiscoveryEvent>>>, event_rx: Mutex<Option<mpsc::Receiver<DiscoveryEvent>>>,
@@ -334,6 +354,16 @@ impl RsDiscovery {
.await; .await;
} }
/// The retained confirmations of a stored device, oldest first, capped at
/// the store's log limit. Empty when the fingerprint is unknown.
pub fn device_logs(&self, fingerprint: String) -> Vec<RsDeviceLog> {
self.instance
.handle
.device_by_fingerprint(&fingerprint)
.map(|stored| stored.logs.into_iter().map(rs_device_log).collect())
.unwrap_or_default()
}
/// Stops the discovery, which also ends the [RsDiscovery::listen] stream. /// Stops the discovery, which also ends the [RsDiscovery::listen] stream.
/// Returns after all sockets are closed, so the port can be bound again. /// Returns after all sockets are closed, so the port can be bound again.
pub async fn stop(&self) { pub async fn stop(&self) {
@@ -349,6 +379,23 @@ impl RsDiscovery {
} }
} }
fn rs_device_log(log: DeviceLog) -> RsDeviceLog {
let DeviceChannel::Http(http) = log.channel;
RsDeviceLog {
timestamp_millis: log
.timestamp
.duration_since(std::time::UNIX_EPOCH)
.map(|elapsed| elapsed.as_millis() as u64)
.unwrap_or(0),
kind: log.kind,
channel: RsDeviceChannel {
host: http.host,
port: http.port,
protocol: http.protocol,
},
}
}
/// The merged stored device flattened for the Dart side, its channels ranked /// The merged stored device flattened for the Dart side, its channels ranked
/// best first. /// best first.
fn rs_stored_device(stored: StatefulDevice) -> RsStoredDevice { fn rs_stored_device(stored: StatefulDevice) -> RsStoredDevice {
@@ -44,7 +44,7 @@ flutter_rust_bridge::frb_generated_boilerplate!(
default_rust_auto_opaque = RustAutoOpaqueMoi, default_rust_auto_opaque = RustAutoOpaqueMoi,
); );
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.12.0"; pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.12.0";
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -1120530143; pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -2095161624;
// Section: executor // Section: executor
@@ -528,6 +528,60 @@ fn wire__crate__api__discovery__RsDiscovery_announce_impl(
}, },
) )
} }
fn wire__crate__api__discovery__RsDiscovery_device_logs_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
data_len_: i32,
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "RsDiscovery_device_logs",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
move || {
let message = unsafe {
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
ptr_,
rust_vec_len_,
data_len_,
)
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<RsDiscovery>,
>>::sse_decode(&mut deserializer);
let api_fingerprint = <String>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
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(crate::api::discovery::RsDiscovery::device_logs(
&*api_that_guard,
api_fingerprint,
))?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__discovery__RsDiscovery_discover_impl( fn wire__crate__api__discovery__RsDiscovery_discover_impl(
port_: flutter_rust_bridge::for_generated::MessagePort, port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
@@ -3932,6 +3986,18 @@ impl SseDecode for crate::api::webrtc::ClientInfoWithoutId {
} }
} }
impl SseDecode for crate::api::discovery::DeviceLogKind {
// 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 = <i32>::sse_decode(deserializer);
return match inner {
0 => crate::api::discovery::DeviceLogKind::Discovered,
1 => crate::api::discovery::DeviceLogKind::Updated,
_ => unreachable!("Invalid variant for DeviceLogKind: {}", inner),
};
}
}
impl SseDecode for crate::api::model::DeviceType { impl SseDecode for crate::api::model::DeviceType {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -4114,6 +4180,20 @@ impl SseDecode for Vec<crate::api::discovery::RsDeviceChannel> {
} }
} }
impl SseDecode for Vec<crate::api::discovery::RsDeviceLog> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut len_ = <i32>::sse_decode(deserializer);
let mut ans_ = Vec::with_capacity(len_ as usize);
for idx_ in 0..len_ {
ans_.push(<crate::api::discovery::RsDeviceLog>::sse_decode(
deserializer,
));
}
return ans_;
}
}
impl SseDecode for crate::api::http::LsHttpClientVersion { impl SseDecode for crate::api::http::LsHttpClientVersion {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -4500,6 +4580,20 @@ impl SseDecode for crate::api::discovery::RsDeviceChannel {
} }
} }
impl SseDecode for crate::api::discovery::RsDeviceLog {
// 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_timestampMillis = <u64>::sse_decode(deserializer);
let mut var_kind = <crate::api::discovery::DeviceLogKind>::sse_decode(deserializer);
let mut var_channel = <crate::api::discovery::RsDeviceChannel>::sse_decode(deserializer);
return crate::api::discovery::RsDeviceLog {
timestamp_millis: var_timestampMillis,
kind: var_kind,
channel: var_channel,
};
}
}
impl SseDecode for crate::api::discovery::RsDiscoveredDevice { impl SseDecode for crate::api::discovery::RsDiscoveredDevice {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -5028,194 +5122,200 @@ fn pde_ffi_dispatcher_primary_impl(
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
9 => wire__crate__api__discovery__RsDiscovery_discover_impl( 9 => wire__crate__api__discovery__RsDiscovery_device_logs_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
10 => { 10 => wire__crate__api__discovery__RsDiscovery_discover_impl(
port,
ptr,
rust_vec_len,
data_len,
),
11 => {
wire__crate__api__discovery__RsDiscovery_listen_impl(port, ptr, rust_vec_len, data_len) wire__crate__api__discovery__RsDiscovery_listen_impl(port, ptr, rust_vec_len, data_len)
} }
11 => wire__crate__api__discovery__RsDiscovery_multicast_error_impl( 12 => wire__crate__api__discovery__RsDiscovery_multicast_error_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
12 => wire__crate__api__discovery__RsDiscovery_scan_subnet_impl( 13 => wire__crate__api__discovery__RsDiscovery_scan_subnet_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
13 => wire__crate__api__discovery__RsDiscovery_set_answer_announcements_impl( 14 => wire__crate__api__discovery__RsDiscovery_set_answer_announcements_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
14 => wire__crate__api__discovery__RsDiscovery_stop_impl(port, ptr, rust_vec_len, data_len), 15 => wire__crate__api__discovery__RsDiscovery_stop_impl(port, ptr, rust_vec_len, data_len),
15 => wire__crate__api__http__RsHttpClient_cancel_impl(port, ptr, rust_vec_len, data_len), 16 => wire__crate__api__http__RsHttpClient_cancel_impl(port, ptr, rust_vec_len, data_len),
16 => wire__crate__api__http__RsHttpClient_prepare_upload_impl( 17 => wire__crate__api__http__RsHttpClient_prepare_upload_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
17 => wire__crate__api__http__RsHttpClient_register_impl(port, ptr, rust_vec_len, data_len), 18 => wire__crate__api__http__RsHttpClient_register_impl(port, ptr, rust_vec_len, data_len),
18 => wire__crate__api__http__RsHttpClient_upload_impl(port, ptr, rust_vec_len, data_len), 19 => wire__crate__api__http__RsHttpClient_upload_impl(port, ptr, rust_vec_len, data_len),
19 => wire__crate__api__server__RsHttpServer_cancel_session_impl( 20 => wire__crate__api__server__RsHttpServer_cancel_session_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
20 => wire__crate__api__server__RsHttpServer_fail_file_download_impl( 21 => wire__crate__api__server__RsHttpServer_fail_file_download_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
21 => wire__crate__api__server__RsHttpServer_fail_file_upload_impl( 22 => wire__crate__api__server__RsHttpServer_fail_file_upload_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
22 => wire__crate__api__server__RsHttpServer_listen_impl(port, ptr, rust_vec_len, data_len), 23 => wire__crate__api__server__RsHttpServer_listen_impl(port, ptr, rust_vec_len, data_len),
23 => wire__crate__api__server__RsHttpServer_respond_file_download_impl( 24 => wire__crate__api__server__RsHttpServer_respond_file_download_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
24 => wire__crate__api__server__RsHttpServer_respond_file_upload_impl( 25 => wire__crate__api__server__RsHttpServer_respond_file_upload_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
25 => wire__crate__api__server__RsHttpServer_respond_prepare_download_impl( 26 => wire__crate__api__server__RsHttpServer_respond_prepare_download_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
26 => wire__crate__api__server__RsHttpServer_respond_prepare_upload_impl( 27 => wire__crate__api__server__RsHttpServer_respond_prepare_upload_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
27 => wire__crate__api__server__RsHttpServer_stop_impl(port, ptr, rust_vec_len, data_len), 28 => wire__crate__api__server__RsHttpServer_stop_impl(port, ptr, rust_vec_len, data_len),
28 => wire__crate__api__webrtc__RtcFileReceiver_get_file_id_impl( 29 => wire__crate__api__webrtc__RtcFileReceiver_get_file_id_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
29 => wire__crate__api__webrtc__RtcFileReceiver_receive_impl( 30 => wire__crate__api__webrtc__RtcFileReceiver_receive_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
30 => wire__crate__api__webrtc__RtcFileSender_send_impl(port, ptr, rust_vec_len, data_len), 31 => wire__crate__api__webrtc__RtcFileSender_send_impl(port, ptr, rust_vec_len, data_len),
31 => wire__crate__api__webrtc__RtcReceiveController_decline_impl( 32 => wire__crate__api__webrtc__RtcReceiveController_decline_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
32 => wire__crate__api__webrtc__RtcReceiveController_listen_error_impl( 33 => wire__crate__api__webrtc__RtcReceiveController_listen_error_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
33 => wire__crate__api__webrtc__RtcReceiveController_listen_files_impl( 34 => wire__crate__api__webrtc__RtcReceiveController_listen_files_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
34 => wire__crate__api__webrtc__RtcReceiveController_listen_receiving_impl( 35 => wire__crate__api__webrtc__RtcReceiveController_listen_receiving_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
35 => wire__crate__api__webrtc__RtcReceiveController_listen_status_impl( 36 => wire__crate__api__webrtc__RtcReceiveController_listen_status_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
36 => wire__crate__api__webrtc__RtcReceiveController_send_file_status_impl( 37 => wire__crate__api__webrtc__RtcReceiveController_send_file_status_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
37 => wire__crate__api__webrtc__RtcReceiveController_send_pin_impl( 38 => wire__crate__api__webrtc__RtcReceiveController_send_pin_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
38 => wire__crate__api__webrtc__RtcReceiveController_send_selection_impl( 39 => wire__crate__api__webrtc__RtcReceiveController_send_selection_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
39 => wire__crate__api__webrtc__RtcSendController_listen_error_impl( 40 => wire__crate__api__webrtc__RtcSendController_listen_error_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
40 => wire__crate__api__webrtc__RtcSendController_listen_selected_files_impl( 41 => wire__crate__api__webrtc__RtcSendController_listen_selected_files_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
41 => wire__crate__api__webrtc__RtcSendController_listen_status_impl( 42 => wire__crate__api__webrtc__RtcSendController_listen_status_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
42 => wire__crate__api__webrtc__RtcSendController_send_file_impl( 43 => wire__crate__api__webrtc__RtcSendController_send_file_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
43 => wire__crate__api__webrtc__RtcSendController_send_pin_impl( 44 => wire__crate__api__webrtc__RtcSendController_send_pin_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
44 => wire__crate__api__webrtc__connect_impl(port, ptr, rust_vec_len, data_len), 45 => wire__crate__api__webrtc__connect_impl(port, ptr, rust_vec_len, data_len),
47 => wire__crate__api__stream__create_stream_impl(port, ptr, rust_vec_len, data_len), 48 => wire__crate__api__stream__create_stream_impl(port, ptr, rust_vec_len, data_len),
48 => { 49 => {
wire__crate__api__logging__enable_debug_logging_impl(port, ptr, rust_vec_len, data_len) wire__crate__api__logging__enable_debug_logging_impl(port, ptr, rust_vec_len, data_len)
} }
49 => wire__crate__api__crypto__generate_key_pair_impl(port, ptr, rust_vec_len, data_len), 50 => wire__crate__api__crypto__generate_key_pair_impl(port, ptr, rust_vec_len, data_len),
50 => wire__crate__api__crypto__generate_security_context_impl( 51 => wire__crate__api__crypto__generate_security_context_impl(
port, port,
ptr, ptr,
rust_vec_len, rust_vec_len,
data_len, data_len,
), ),
51 => wire__crate__api__crypto__hash_file_impl(port, ptr, rust_vec_len, data_len), 52 => wire__crate__api__crypto__hash_file_impl(port, ptr, rust_vec_len, data_len),
54 => wire__crate__api__discovery__start_discovery_impl(port, ptr, rust_vec_len, data_len), 55 => wire__crate__api__discovery__start_discovery_impl(port, ptr, rust_vec_len, data_len),
55 => wire__crate__api__server__start_server_impl(port, ptr, rust_vec_len, data_len), 56 => wire__crate__api__server__start_server_impl(port, ptr, rust_vec_len, data_len),
56 => wire__crate__api__crypto__verify_cert_impl(port, ptr, rust_vec_len, data_len), 57 => wire__crate__api__crypto__verify_cert_impl(port, ptr, rust_vec_len, data_len),
_ => unreachable!(), _ => unreachable!(),
} }
} }
@@ -5230,10 +5330,10 @@ fn pde_ffi_dispatcher_sync_impl(
match func_id { match func_id {
2 => wire__crate__api__stream__Dart2RustStreamSink_close_impl(ptr, rust_vec_len, data_len), 2 => wire__crate__api__stream__Dart2RustStreamSink_close_impl(ptr, rust_vec_len, data_len),
6 => wire__crate__api__cancel__RsCancellationToken_cancel_impl(ptr, rust_vec_len, data_len), 6 => wire__crate__api__cancel__RsCancellationToken_cancel_impl(ptr, rust_vec_len, data_len),
45 => wire__crate__api__cancel__create_cancellation_token_impl(ptr, rust_vec_len, data_len), 46 => wire__crate__api__cancel__create_cancellation_token_impl(ptr, rust_vec_len, data_len),
46 => wire__crate__api__http__create_client_impl(ptr, rust_vec_len, data_len), 47 => wire__crate__api__http__create_client_impl(ptr, rust_vec_len, data_len),
52 => wire__crate__api__filename__is_valid_file_name_impl(ptr, rust_vec_len, data_len), 53 => wire__crate__api__filename__is_valid_file_name_impl(ptr, rust_vec_len, data_len),
53 => wire__crate__api__filename__sanitize_file_name_impl(ptr, rust_vec_len, data_len), 54 => wire__crate__api__filename__sanitize_file_name_impl(ptr, rust_vec_len, data_len),
_ => unreachable!(), _ => unreachable!(),
} }
} }
@@ -5474,6 +5574,27 @@ impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<crate::api::webrtc::ClientInfo
} }
} }
// Codec=Dco (DartCObject based), see doc to use other codecs // Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for FrbWrapper<crate::api::discovery::DeviceLogKind> {
fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
match self.0 {
crate::api::discovery::DeviceLogKind::Discovered => 0.into_dart(),
crate::api::discovery::DeviceLogKind::Updated => 1.into_dart(),
_ => unreachable!(),
}
}
}
impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive
for FrbWrapper<crate::api::discovery::DeviceLogKind>
{
}
impl flutter_rust_bridge::IntoIntoDart<FrbWrapper<crate::api::discovery::DeviceLogKind>>
for crate::api::discovery::DeviceLogKind
{
fn into_into_dart(self) -> FrbWrapper<crate::api::discovery::DeviceLogKind> {
self.into()
}
}
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for FrbWrapper<crate::api::model::DeviceType> { impl flutter_rust_bridge::IntoDart for FrbWrapper<crate::api::model::DeviceType> {
fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
match self.0 { match self.0 {
@@ -5855,6 +5976,28 @@ impl flutter_rust_bridge::IntoIntoDart<crate::api::discovery::RsDeviceChannel>
} }
} }
// Codec=Dco (DartCObject based), see doc to use other codecs // Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for crate::api::discovery::RsDeviceLog {
fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
[
self.timestamp_millis.into_into_dart().into_dart(),
self.kind.into_into_dart().into_dart(),
self.channel.into_into_dart().into_dart(),
]
.into_dart()
}
}
impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive
for crate::api::discovery::RsDeviceLog
{
}
impl flutter_rust_bridge::IntoIntoDart<crate::api::discovery::RsDeviceLog>
for crate::api::discovery::RsDeviceLog
{
fn into_into_dart(self) -> crate::api::discovery::RsDeviceLog {
self
}
}
// Codec=Dco (DartCObject based), see doc to use other codecs
impl flutter_rust_bridge::IntoDart for crate::api::discovery::RsDiscoveredDevice { impl flutter_rust_bridge::IntoDart for crate::api::discovery::RsDiscoveredDevice {
fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
[ [
@@ -6762,6 +6905,22 @@ impl SseEncode for crate::api::webrtc::ClientInfoWithoutId {
} }
} }
impl SseEncode for crate::api::discovery::DeviceLogKind {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<i32>::sse_encode(
match self {
crate::api::discovery::DeviceLogKind::Discovered => 0,
crate::api::discovery::DeviceLogKind::Updated => 1,
_ => {
unimplemented!("");
}
},
serializer,
);
}
}
impl SseEncode for crate::api::model::DeviceType { impl SseEncode for crate::api::model::DeviceType {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -6912,6 +7071,16 @@ impl SseEncode for Vec<crate::api::discovery::RsDeviceChannel> {
} }
} }
impl SseEncode for Vec<crate::api::discovery::RsDeviceLog> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<i32>::sse_encode(self.len() as _, serializer);
for item in self {
<crate::api::discovery::RsDeviceLog>::sse_encode(item, serializer);
}
}
}
impl SseEncode for crate::api::http::LsHttpClientVersion { impl SseEncode for crate::api::http::LsHttpClientVersion {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
@@ -7222,6 +7391,15 @@ impl SseEncode for crate::api::discovery::RsDeviceChannel {
} }
} }
impl SseEncode for crate::api::discovery::RsDeviceLog {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<u64>::sse_encode(self.timestamp_millis, serializer);
<crate::api::discovery::DeviceLogKind>::sse_encode(self.kind, serializer);
<crate::api::discovery::RsDeviceChannel>::sse_encode(self.channel, serializer);
}
}
impl SseEncode for crate::api::discovery::RsDiscoveredDevice { impl SseEncode for crate::api::discovery::RsDiscoveredDevice {
// Codec=Sse (Serialization based), see doc to use other codecs // Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {