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};