diff --git a/Cargo.lock b/Cargo.lock index 8914b795..8af87b3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2082,6 +2082,7 @@ name = "ironrdp-cliprdr" version = "0.1.0" dependencies = [ "bitflags 2.6.0", + "ironrdp-core", "ironrdp-pdu", "ironrdp-svc", "thiserror", @@ -2102,6 +2103,7 @@ name = "ironrdp-cliprdr-native" version = "0.1.0" dependencies = [ "ironrdp-cliprdr", + "ironrdp-core", "ironrdp-svc", "thiserror", "tracing", @@ -2138,6 +2140,7 @@ dependencies = [ name = "ironrdp-displaycontrol" version = "0.1.0" dependencies = [ + "ironrdp-core", "ironrdp-dvc", "ironrdp-pdu", "ironrdp-svc", @@ -2250,6 +2253,7 @@ name = "ironrdp-rdpdr" version = "0.1.0" dependencies = [ "bitflags 2.6.0", + "ironrdp-core", "ironrdp-error", "ironrdp-pdu", "ironrdp-svc", @@ -2260,6 +2264,7 @@ dependencies = [ name = "ironrdp-rdpdr-native" version = "0.1.0" dependencies = [ + "ironrdp-core", "ironrdp-pdu", "ironrdp-rdpdr", "ironrdp-svc", @@ -2272,6 +2277,7 @@ name = "ironrdp-rdpsnd" version = "0.1.0" dependencies = [ "bitflags 2.6.0", + "ironrdp-core", "ironrdp-pdu", "ironrdp-svc", "tracing", @@ -2298,6 +2304,7 @@ dependencies = [ "ironrdp-ainput", "ironrdp-async", "ironrdp-cliprdr", + "ironrdp-core", "ironrdp-displaycontrol", "ironrdp-dvc", "ironrdp-graphics", @@ -2400,6 +2407,7 @@ dependencies = [ "gloo-timers", "ironrdp", "ironrdp-cliprdr-format", + "ironrdp-core", "ironrdp-futures", "ironrdp-rdcleanpath", "js-sys", diff --git a/crates/ironrdp-cliprdr-native/Cargo.toml b/crates/ironrdp-cliprdr-native/Cargo.toml index 1f32f647..14d001c9 100644 --- a/crates/ironrdp-cliprdr-native/Cargo.toml +++ b/crates/ironrdp-cliprdr-native/Cargo.toml @@ -17,6 +17,7 @@ doctest = false test = false [dependencies] +ironrdp-core.workspace = true ironrdp-cliprdr.workspace = true ironrdp-svc.workspace = true tracing.workspace = true diff --git a/crates/ironrdp-cliprdr-native/src/stub.rs b/crates/ironrdp-cliprdr-native/src/stub.rs index c4c5bf4d..727462c1 100644 --- a/crates/ironrdp-cliprdr-native/src/stub.rs +++ b/crates/ironrdp-cliprdr-native/src/stub.rs @@ -3,7 +3,7 @@ use ironrdp_cliprdr::pdu::{ ClipboardFormat, ClipboardGeneralCapabilityFlags, FileContentsRequest, FileContentsResponse, FormatDataRequest, FormatDataResponse, LockDataId, }; -use ironrdp_svc::impl_as_any; +use ironrdp_core::impl_as_any; use tracing::debug; pub struct StubClipboard; diff --git a/crates/ironrdp-cliprdr-native/src/windows/cliprdr_backend.rs b/crates/ironrdp-cliprdr-native/src/windows/cliprdr_backend.rs index 01087bb2..e6bc8a0e 100644 --- a/crates/ironrdp-cliprdr-native/src/windows/cliprdr_backend.rs +++ b/crates/ironrdp-cliprdr-native/src/windows/cliprdr_backend.rs @@ -1,11 +1,11 @@ use std::sync::mpsc as mpsc_sync; +use ironrdp_core::impl_as_any; use ironrdp_cliprdr::backend::CliprdrBackend; use ironrdp_cliprdr::pdu::{ ClipboardFormat, ClipboardGeneralCapabilityFlags, FileContentsRequest, FileContentsResponse, FormatDataRequest, FormatDataResponse, LockDataId, }; -use ironrdp_svc::impl_as_any; use windows::Win32::Foundation::{HWND, LPARAM, WPARAM}; use windows::Win32::UI::WindowsAndMessaging::PostMessageW; diff --git a/crates/ironrdp-cliprdr/Cargo.toml b/crates/ironrdp-cliprdr/Cargo.toml index 66e8336a..202513d2 100644 --- a/crates/ironrdp-cliprdr/Cargo.toml +++ b/crates/ironrdp-cliprdr/Cargo.toml @@ -17,6 +17,7 @@ doctest = false test = false [dependencies] +ironrdp-core.workspace = true ironrdp-pdu.workspace = true ironrdp-svc.workspace = true thiserror.workspace = true @@ -25,4 +26,3 @@ bitflags.workspace = true [lints] workspace = true - diff --git a/crates/ironrdp-cliprdr/src/backend.rs b/crates/ironrdp-cliprdr/src/backend.rs index 6b8bff7d..7c561200 100644 --- a/crates/ironrdp-cliprdr/src/backend.rs +++ b/crates/ironrdp-cliprdr/src/backend.rs @@ -1,6 +1,6 @@ //! This module provides infrastructure for implementing OS-specific clipboard backend. -use ironrdp_svc::AsAny; +use ironrdp_core::AsAny; use crate::pdu::{ ClipboardFormat, ClipboardFormatId, ClipboardGeneralCapabilityFlags, FileContentsRequest, FileContentsResponse, diff --git a/crates/ironrdp-cliprdr/src/lib.rs b/crates/ironrdp-cliprdr/src/lib.rs index d3a41dbc..7ec1f39e 100644 --- a/crates/ironrdp-cliprdr/src/lib.rs +++ b/crates/ironrdp-cliprdr/src/lib.rs @@ -9,10 +9,11 @@ pub mod backend; pub mod pdu; use backend::CliprdrBackend; +use ironrdp_core::AsAny; use ironrdp_pdu::gcc::ChannelName; use ironrdp_pdu::{decode, PduResult}; use ironrdp_svc::{ - AsAny, ChannelFlags, CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor, SvcProcessorMessages, + ChannelFlags, CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor, SvcProcessorMessages, SvcServerProcessor, }; use pdu::{ diff --git a/crates/ironrdp-core/src/as_any.rs b/crates/ironrdp-core/src/as_any.rs new file mode 100644 index 00000000..484c9571 --- /dev/null +++ b/crates/ironrdp-core/src/as_any.rs @@ -0,0 +1,28 @@ +use core::any::Any; + +/// Implement [`AsAny`] for the given type. +#[macro_export] +macro_rules! impl_as_any { + ($t:ty) => { + impl $crate::AsAny for $t { + #[inline] + fn as_any(&self) -> &dyn core::any::Any { + self + } + + #[inline] + fn as_any_mut(&mut self) -> &mut dyn core::any::Any { + self + } + } + }; +} + +/// Type information (`TypeId`) may be retrieved at runtime for this type. +pub trait AsAny: 'static { + /// Returns a reference to the type information for this type. + fn as_any(&self) -> &dyn Any; + + /// Returns a mutable reference to the type information for this type. + fn as_any_mut(&mut self) -> &mut dyn Any; +} diff --git a/crates/ironrdp-core/src/lib.rs b/crates/ironrdp-core/src/lib.rs index 6a95a799..ac00a695 100644 --- a/crates/ironrdp-core/src/lib.rs +++ b/crates/ironrdp-core/src/lib.rs @@ -10,6 +10,12 @@ extern crate alloc; #[macro_use] mod macros; +mod as_any; + +// Flat API hierarchy of common traits and types + +pub use self::as_any::*; + // Trait that can only be implemented within the current module pub(crate) mod private { #[doc(hidden)] diff --git a/crates/ironrdp-displaycontrol/Cargo.toml b/crates/ironrdp-displaycontrol/Cargo.toml index 7b25e84e..54c6f188 100644 --- a/crates/ironrdp-displaycontrol/Cargo.toml +++ b/crates/ironrdp-displaycontrol/Cargo.toml @@ -12,6 +12,7 @@ keywords.workspace = true categories.workspace = true [dependencies] +ironrdp-core.workspace = true ironrdp-dvc.workspace = true ironrdp-pdu.workspace = true ironrdp-svc.workspace = true @@ -19,4 +20,3 @@ tracing.workspace = true [lints] workspace = true - diff --git a/crates/ironrdp-displaycontrol/src/client.rs b/crates/ironrdp-displaycontrol/src/client.rs index b5388530..deb1346f 100644 --- a/crates/ironrdp-displaycontrol/src/client.rs +++ b/crates/ironrdp-displaycontrol/src/client.rs @@ -2,9 +2,10 @@ use crate::{ pdu::{DisplayControlCapabilities, DisplayControlMonitorLayout, DisplayControlPdu}, CHANNEL_NAME, }; +use ironrdp_core::impl_as_any; use ironrdp_dvc::{encode_dvc_messages, DvcClientProcessor, DvcMessage, DvcProcessor}; use ironrdp_pdu::{cursor::ReadCursor, PduDecode, PduResult}; -use ironrdp_svc::{impl_as_any, ChannelFlags, SvcMessage}; +use ironrdp_svc::{ChannelFlags, SvcMessage}; use tracing::debug; /// A client for the Display Control Virtual Channel. diff --git a/crates/ironrdp-displaycontrol/src/server.rs b/crates/ironrdp-displaycontrol/src/server.rs index bd6dc1e7..49d7730f 100644 --- a/crates/ironrdp-displaycontrol/src/server.rs +++ b/crates/ironrdp-displaycontrol/src/server.rs @@ -1,6 +1,6 @@ +use ironrdp_core::impl_as_any; use ironrdp_dvc::{DvcMessage, DvcProcessor, DvcServerProcessor}; use ironrdp_pdu::{decode, PduResult}; -use ironrdp_svc::impl_as_any; use tracing::debug; use crate::{ diff --git a/crates/ironrdp-dvc/src/client.rs b/crates/ironrdp-dvc/src/client.rs index 6f7a1318..2981cbff 100644 --- a/crates/ironrdp-dvc/src/client.rs +++ b/crates/ironrdp-dvc/src/client.rs @@ -6,8 +6,9 @@ use crate::{encode_dvc_messages, DvcProcessor, DynamicChannelSet, DynamicVirtual use alloc::vec::Vec; use core::any::TypeId; use core::fmt; +use ironrdp_core::impl_as_any; use ironrdp_pdu as pdu; -use ironrdp_svc::{impl_as_any, ChannelFlags, CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor}; +use ironrdp_svc::{ChannelFlags, CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor}; use pdu::cursor::ReadCursor; use pdu::gcc::ChannelName; use pdu::other_err; diff --git a/crates/ironrdp-dvc/src/lib.rs b/crates/ironrdp-dvc/src/lib.rs index ec18ba44..c1a21803 100644 --- a/crates/ironrdp-dvc/src/lib.rs +++ b/crates/ironrdp-dvc/src/lib.rs @@ -16,9 +16,9 @@ use alloc::vec::Vec; // Re-export ironrdp_pdu crate for convenience #[rustfmt::skip] // do not re-order this pub use pub use ironrdp_pdu; -use ironrdp_core::assert_obj_safe; +use ironrdp_core::{assert_obj_safe, AsAny}; use ironrdp_pdu::{cast_length, encode_vec, other_err, PduEncode, PduResult}; -use ironrdp_svc::{self, AsAny, SvcMessage}; +use ironrdp_svc::{self, SvcMessage}; mod complete_data; use complete_data::CompleteData; diff --git a/crates/ironrdp-dvc/src/server.rs b/crates/ironrdp-dvc/src/server.rs index 6c68c44c..3301ef27 100644 --- a/crates/ironrdp-dvc/src/server.rs +++ b/crates/ironrdp-dvc/src/server.rs @@ -5,8 +5,9 @@ use crate::{encode_dvc_messages, CompleteData, DvcProcessor}; use alloc::boxed::Box; use alloc::vec::Vec; use core::fmt; +use ironrdp_core::impl_as_any; use ironrdp_pdu as pdu; -use ironrdp_svc::{impl_as_any, ChannelFlags, CompressionCondition, SvcMessage, SvcProcessor, SvcServerProcessor}; +use ironrdp_svc::{ChannelFlags, CompressionCondition, SvcMessage, SvcProcessor, SvcServerProcessor}; use pdu::cursor::ReadCursor; use pdu::gcc::ChannelName; use pdu::PduDecode as _; diff --git a/crates/ironrdp-rdpdr-native/Cargo.toml b/crates/ironrdp-rdpdr-native/Cargo.toml index 44b956cc..9628d493 100644 --- a/crates/ironrdp-rdpdr-native/Cargo.toml +++ b/crates/ironrdp-rdpdr-native/Cargo.toml @@ -17,6 +17,7 @@ test = false [target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies] +ironrdp-core.workspace = true ironrdp-pdu.workspace = true ironrdp-svc.workspace = true ironrdp-rdpdr.workspace = true diff --git a/crates/ironrdp-rdpdr-native/src/nix/backend.rs b/crates/ironrdp-rdpdr-native/src/nix/backend.rs index 534f6a6a..f62a838f 100644 --- a/crates/ironrdp-rdpdr-native/src/nix/backend.rs +++ b/crates/ironrdp-rdpdr-native/src/nix/backend.rs @@ -1,9 +1,10 @@ +use ironrdp_core::impl_as_any; use ironrdp_pdu::PduResult; use ironrdp_rdpdr::pdu::efs::*; use ironrdp_rdpdr::pdu::esc::{ScardCall, ScardIoCtlCode}; use ironrdp_rdpdr::pdu::RdpdrPdu; use ironrdp_rdpdr::RdpdrBackend; -use ironrdp_svc::{impl_as_any, SvcMessage}; +use ironrdp_svc::SvcMessage; use nix::dir::{Dir, OwningIter}; use std::ffi::CString; use std::io::Read; diff --git a/crates/ironrdp-rdpdr/Cargo.toml b/crates/ironrdp-rdpdr/Cargo.toml index 4d400895..0a532963 100644 --- a/crates/ironrdp-rdpdr/Cargo.toml +++ b/crates/ironrdp-rdpdr/Cargo.toml @@ -16,6 +16,7 @@ doctest = false test = false [dependencies] +ironrdp-core.workspace = true ironrdp-error.workspace = true ironrdp-pdu.workspace = true ironrdp-svc.workspace = true @@ -24,4 +25,3 @@ bitflags.workspace = true [lints] workspace = true - diff --git a/crates/ironrdp-rdpdr/src/backend/mod.rs b/crates/ironrdp-rdpdr/src/backend/mod.rs index 541d2f2e..8fd9ae9f 100644 --- a/crates/ironrdp-rdpdr/src/backend/mod.rs +++ b/crates/ironrdp-rdpdr/src/backend/mod.rs @@ -2,8 +2,8 @@ pub mod noop; use core::fmt; +use ironrdp_core::AsAny; use ironrdp_pdu::PduResult; -use ironrdp_svc::AsAny; use crate::pdu::efs::{DeviceControlRequest, ServerDeviceAnnounceResponse, ServerDriveIoRequest}; use crate::pdu::esc::{ScardCall, ScardIoCtlCode}; diff --git a/crates/ironrdp-rdpdr/src/backend/noop.rs b/crates/ironrdp-rdpdr/src/backend/noop.rs index 863a3372..82776332 100644 --- a/crates/ironrdp-rdpdr/src/backend/noop.rs +++ b/crates/ironrdp-rdpdr/src/backend/noop.rs @@ -1,5 +1,6 @@ +use ironrdp_core::impl_as_any; use ironrdp_pdu::PduResult; -use ironrdp_svc::{impl_as_any, SvcMessage}; +use ironrdp_svc::SvcMessage; use super::RdpdrBackend; use crate::pdu::efs::{DeviceControlRequest, ServerDeviceAnnounceResponse}; diff --git a/crates/ironrdp-rdpdr/src/lib.rs b/crates/ironrdp-rdpdr/src/lib.rs index 4d8f4571..1b0ac2e7 100644 --- a/crates/ironrdp-rdpdr/src/lib.rs +++ b/crates/ironrdp-rdpdr/src/lib.rs @@ -8,10 +8,11 @@ #[macro_use] extern crate tracing; +use ironrdp_core::impl_as_any; use ironrdp_pdu::cursor::ReadCursor; use ironrdp_pdu::gcc::ChannelName; use ironrdp_pdu::{decode_cursor, other_err, PduResult}; -use ironrdp_svc::{impl_as_any, CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor}; +use ironrdp_svc::{CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor}; use pdu::efs::{ Capabilities, ClientDeviceListAnnounce, ClientNameRequest, ClientNameRequestUnicodeFlag, CoreCapability, CoreCapabilityKind, DeviceControlRequest, DeviceIoRequest, DeviceType, Devices, ServerDeviceAnnounceResponse, diff --git a/crates/ironrdp-rdpsnd/Cargo.toml b/crates/ironrdp-rdpsnd/Cargo.toml index fc03ee0c..3b177b38 100644 --- a/crates/ironrdp-rdpsnd/Cargo.toml +++ b/crates/ironrdp-rdpsnd/Cargo.toml @@ -23,8 +23,8 @@ std = [] bitflags.workspace = true tracing.workspace = true ironrdp-svc.workspace = true +ironrdp-core = { workspace = true, features = ["alloc"] } ironrdp-pdu = { workspace = true, features = ["alloc"] } [lints] workspace = true - diff --git a/crates/ironrdp-rdpsnd/src/client.rs b/crates/ironrdp-rdpsnd/src/client.rs index 18dc47fe..dfa83e29 100644 --- a/crates/ironrdp-rdpsnd/src/client.rs +++ b/crates/ironrdp-rdpsnd/src/client.rs @@ -1,9 +1,10 @@ use std::borrow::Cow; +use ironrdp_core::impl_as_any; use ironrdp_pdu::cursor::ReadCursor; use ironrdp_pdu::gcc::ChannelName; use ironrdp_pdu::{cast_length, other_err, PduDecode, PduResult}; -use ironrdp_svc::{impl_as_any, CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor}; +use ironrdp_svc::{CompressionCondition, SvcClientProcessor, SvcMessage, SvcProcessor}; use tracing::{debug, error}; use crate::pdu::{self, AudioFormat, PitchPdu, ServerAudioFormatPdu, TrainingPdu, VolumePdu}; diff --git a/crates/ironrdp-rdpsnd/src/server.rs b/crates/ironrdp-rdpsnd/src/server.rs index b5651a2c..f9a95cd7 100644 --- a/crates/ironrdp-rdpsnd/src/server.rs +++ b/crates/ironrdp-rdpsnd/src/server.rs @@ -1,9 +1,8 @@ +use ironrdp_core::impl_as_any; use ironrdp_pdu::cursor::ReadCursor; use ironrdp_pdu::gcc::ChannelName; use ironrdp_pdu::{other_err, PduDecode, PduResult}; -use ironrdp_svc::{ - impl_as_any, CompressionCondition, SvcMessage, SvcProcessor, SvcProcessorMessages, SvcServerProcessor, -}; +use ironrdp_svc::{CompressionCondition, SvcMessage, SvcProcessor, SvcProcessorMessages, SvcServerProcessor}; use tracing::{debug, error}; use crate::pdu::{self, ClientAudioFormatPdu, QualityMode}; diff --git a/crates/ironrdp-server/Cargo.toml b/crates/ironrdp-server/Cargo.toml index b5c7f36b..d8ce0b36 100644 --- a/crates/ironrdp-server/Cargo.toml +++ b/crates/ironrdp-server/Cargo.toml @@ -22,6 +22,7 @@ tokio-rustls = "0.26" async-trait = "0.1" ironrdp-async.workspace = true ironrdp-ainput.workspace = true +ironrdp-core.workspace = true ironrdp-pdu.workspace = true ironrdp-svc.workspace = true ironrdp-cliprdr.workspace = true @@ -38,4 +39,3 @@ tokio = { version = "1", features = ["sync"] } [lints] workspace = true - diff --git a/crates/ironrdp-server/src/server.rs b/crates/ironrdp-server/src/server.rs index b046c1dc..486d12ef 100644 --- a/crates/ironrdp-server/src/server.rs +++ b/crates/ironrdp-server/src/server.rs @@ -6,6 +6,7 @@ use ironrdp_acceptor::{self, Acceptor, AcceptorResult, BeginResult, DesktopSize} use ironrdp_async::bytes; use ironrdp_cliprdr::backend::ClipboardMessage; use ironrdp_cliprdr::CliprdrServer; +use ironrdp_core::impl_as_any; use ironrdp_displaycontrol::pdu::DisplayControlMonitorLayout; use ironrdp_displaycontrol::server::{DisplayControlHandler, DisplayControlServer}; use ironrdp_pdu::input::fast_path::{FastPathInput, FastPathInputEvent}; @@ -14,7 +15,7 @@ use ironrdp_pdu::mcs::{SendDataIndication, SendDataRequest}; use ironrdp_pdu::rdp::capability_sets::{BitmapCodecs, CapabilitySet, CmdFlags, GeneralExtraFlags}; use ironrdp_pdu::rdp::headers::{ServerDeactivateAll, ShareControlPdu}; use ironrdp_pdu::{self, decode, encode_vec, mcs, nego, rdp, Action, PduResult}; -use ironrdp_svc::{impl_as_any, server_encode_svc_messages, StaticChannelId, StaticChannelSet, SvcProcessor}; +use ironrdp_svc::{server_encode_svc_messages, StaticChannelId, StaticChannelSet, SvcProcessor}; use ironrdp_tokio::{Framed, FramedRead, FramedWrite, TokioFramed}; use rdpsnd::server::{RdpsndServer, RdpsndServerMessage}; use tokio::io::{AsyncRead, AsyncWrite}; diff --git a/crates/ironrdp-svc/src/lib.rs b/crates/ironrdp-svc/src/lib.rs index 6771370c..37661534 100644 --- a/crates/ironrdp-svc/src/lib.rs +++ b/crates/ironrdp-svc/src/lib.rs @@ -9,7 +9,7 @@ pub use ironrdp_pdu as pdu; use alloc::boxed::Box; use alloc::collections::BTreeMap; -use core::any::{Any, TypeId}; +use core::any::TypeId; use core::fmt; use std::borrow::Cow; use std::marker::PhantomData; @@ -226,7 +226,7 @@ pub fn server_encode_svc_messages(messages: Vec, channel_id: u16, in /// communication between client and server components over the main data connection. /// There are at most 31 (optional) static virtual channels that can be created for a single connection, for a /// total of 32 static channels when accounting for the non-optional I/O channel. -pub trait SvcProcessor: AsAny + fmt::Debug + Send { +pub trait SvcProcessor: ironrdp_core::AsAny + fmt::Debug + Send { /// Returns the name of the static virtual channel corresponding to this processor. fn channel_name(&self) -> ChannelName; @@ -403,30 +403,6 @@ pub fn make_channel_definition(channel: &StaticVirtualChannel) -> ChannelDef { ChannelDef { name, options } } -/// Type information ([`TypeId`]) may be retrieved at runtime for this type. -pub trait AsAny: 'static { - fn as_any(&self) -> &dyn Any; - - fn as_any_mut(&mut self) -> &mut dyn Any; -} - -#[macro_export] -macro_rules! impl_as_any { - ($t:ty) => { - impl $crate::AsAny for $t { - #[inline] - fn as_any(&self) -> &dyn core::any::Any { - self - } - - #[inline] - fn as_any_mut(&mut self) -> &mut dyn core::any::Any { - self - } - } - }; -} - /// A set holding at most one [`StaticVirtualChannel`] for any given type /// implementing [`SvcProcessor`]. /// diff --git a/crates/ironrdp-web/Cargo.toml b/crates/ironrdp-web/Cargo.toml index f27ad8c9..8159b840 100644 --- a/crates/ironrdp-web/Cargo.toml +++ b/crates/ironrdp-web/Cargo.toml @@ -24,7 +24,14 @@ panic_hook = ["dep:console_error_panic_hook"] [dependencies] # Protocols -ironrdp = { workspace = true, features = ["input", "graphics", "dvc", "cliprdr", "svc"] } +ironrdp = { workspace = true, features = [ + "input", + "graphics", + "dvc", + "cliprdr", + "svc", +] } +ironrdp-core.workspace = true ironrdp-cliprdr-format = { workspace = true } ironrdp-futures.workspace = true ironrdp-rdcleanpath.workspace = true @@ -34,8 +41,14 @@ wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = ["HtmlCanvasElement"] } js-sys = "0.3" -gloo-net = { version = "0.6", default-features = false, features = ["websocket", "http", "io-util"] } -gloo-timers = { version = "0.3", default-features = false, features = ["futures"] } +gloo-net = { version = "0.6", default-features = false, features = [ + "websocket", + "http", + "io-util", +] } +gloo-timers = { version = "0.3", default-features = false, features = [ + "futures", +] } tracing-web = "0.1" # Rendering diff --git a/crates/ironrdp-web/src/clipboard/mod.rs b/crates/ironrdp-web/src/clipboard/mod.rs index 56d55e23..b300cd08 100644 --- a/crates/ironrdp-web/src/clipboard/mod.rs +++ b/crates/ironrdp-web/src/clipboard/mod.rs @@ -21,9 +21,9 @@ use ironrdp::cliprdr::pdu::{ ClipboardFormat, ClipboardFormatId, ClipboardFormatName, ClipboardGeneralCapabilityFlags, FileContentsRequest, FileContentsResponse, FormatDataRequest, FormatDataResponse, LockDataId, }; -use ironrdp::svc::impl_as_any; use ironrdp_cliprdr_format::bitmap::{dib_to_png, dibv5_to_png, png_to_cf_dibv5}; use ironrdp_cliprdr_format::html::{cf_html_to_plain_html, plain_html_to_cf_html}; +use ironrdp_core::impl_as_any; use transaction::{ClipboardContent, ClipboardContentValue}; use wasm_bindgen::prelude::*;