lamco_rdp_clipboard/lib.rs
1//! # lamco-rdp-clipboard
2//!
3//! IronRDP clipboard integration for Rust.
4//!
5//! This crate provides the IronRDP [`CliprdrBackend`](ironrdp_cliprdr::backend::CliprdrBackend)
6//! implementation for RDP clipboard synchronization. It bridges between IronRDP's clipboard
7//! channel and the protocol-agnostic [`ClipboardSink`] trait.
8//!
9//! ## Architecture
10//!
11//! ```text
12//! ┌─────────────────────────────────────────────────────────────────────┐
13//! │ lamco-rdp-clipboard │
14//! │ ┌─────────────────────┐ ┌───────────────────────────────┐ │
15//! │ │ RdpCliprdrBackend │◄───────►│ ClipboardSink (trait) │ │
16//! │ │ (CliprdrBackend) │ │ - Portal │ │
17//! │ └─────────────────────┘ │ - X11 │ │
18//! │ ▲ │ - Memory (testing) │ │
19//! │ │ └───────────────────────────────┘ │
20//! │ │ │
21//! │ ▼ │
22//! │ ┌─────────────────────┐ │
23//! │ │ ironrdp-cliprdr │ │
24//! │ │ (CLIPRDR SVC) │ │
25//! │ └─────────────────────┘ │
26//! └─────────────────────────────────────────────────────────────────────┘
27//! ```
28//!
29//! ## Usage
30//!
31//! ```rust,ignore
32//! use lamco_rdp_clipboard::{RdpCliprdrBackend, RdpCliprdrFactory};
33//! use lamco_clipboard_core::ClipboardSink;
34//!
35//! // Create a factory with your clipboard sink implementation
36//! let factory = RdpCliprdrFactory::new(my_clipboard_sink);
37//!
38//! // Use with IronRDP
39//! let backend = factory.build_cliprdr_backend();
40//! ```
41//!
42//! ## Non-blocking Design
43//!
44//! The [`CliprdrBackend`](ironrdp_cliprdr::backend::CliprdrBackend) trait methods are called
45//! synchronously from the RDP message processing loop. To avoid blocking, this implementation
46//! queues events for asynchronous processing and provides a separate event processing loop.
47
48#![cfg_attr(docsrs, feature(doc_cfg))]
49#![deny(missing_docs)]
50
51mod backend;
52mod error;
53mod event;
54mod factory;
55
56pub use backend::RdpCliprdrBackend;
57pub use error::{ClipboardRdpError, ClipboardRdpResult};
58pub use event::{ClipboardEvent, ClipboardEventReceiver, ClipboardEventSender};
59pub use factory::RdpCliprdrFactory;
60
61// Re-export core types for convenience
62pub use lamco_clipboard_core;
63pub use lamco_clipboard_core::{ClipboardFormat, ClipboardSink, FormatConverter, LoopDetector};
64
65// Re-export IronRDP types commonly needed
66pub use ironrdp_cliprdr::backend::{ClipboardMessage, ClipboardMessageProxy};
67pub use ironrdp_cliprdr::pdu::{
68 ClipboardGeneralCapabilityFlags, FileContentsRequest, FileContentsResponse, FormatDataRequest, FormatDataResponse,
69};