Open SourceLamco RDP › Clipboard-core

lamco-clipboard-core

Protocol-agnostic clipboard utilities — the sink trait, format conversion, and loop detection

v0.6 · MIT/Apache-2.0

One clipboard trait, any backend

Clipboard integration on Linux means bridging several backends: XDG Desktop Portal, X11, Wayland wl-data-device, or a headless/memory implementation for tests. lamco-clipboard-core factors out the protocol-agnostic core so any backend can implement the same ClipboardSink trait, while consumer code (like the IronRDP CLIPRDR integration) stays backend-agnostic.

What’s inside

ClipboardSink trait

Abstract clipboard backend interface — 7 async methods

FormatConverter

MIME ↔ Windows clipboard format conversion

LoopDetector

Prevent bidirectional sync loops via SHA256 content hashing

TransferEngine

Chunked transfer for large clipboard payloads with progress tracking

Quick start

Cargo.toml
[dependencies]
lamco-clipboard-core = "0.6"
# For PNG/JPEG/BMP ↔ DIB conversion:
lamco-clipboard-core = { version = "0.6", features = ["image"] }
format conversion
use lamco_clipboard_core::{FormatConverter, LoopDetector};
use lamco_clipboard_core::formats::{mime_to_rdp_formats, rdp_format_to_mime, CF_UNICODETEXT};

// Convert MIME types to RDP clipboard formats
let formats = mime_to_rdp_formats(&["text/plain", "text/html"]);

// Convert RDP format back to MIME
let mime = rdp_format_to_mime(CF_UNICODETEXT);
assert_eq!(mime, Some("text/plain;charset=utf-8"));

// Prevent sync loops
let mut detector = LoopDetector::new();
if !detector.would_cause_loop(&formats) {
    // Safe to sync clipboard content
}
UTF-8 ↔ UTF-16LE for CF_UNICODETEXT
use lamco_clipboard_core::FormatConverter;

let converter = FormatConverter::new();

let unicode = converter.text_to_unicode("Hello, World!").unwrap();
let text = converter.unicode_to_text(&unicode).unwrap();
assert_eq!(text, "Hello, World!");

Feature flags

Feature Description
(default)Text conversion, loop detection, transfer engine
imagePNG / JPEG / BMP / GIF ↔ Windows DIB for clipboard image sync