1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//! Sans-IO implementation of the varlink protocol.
//!
//! This module provides a pure state machine implementation of the varlink protocol
//! that is independent of any I/O operations. This design allows:
//!
//! - Testing protocol logic without real sockets
//! - Flexibility in I/O implementation (sync, async, custom transports)
//! - Better composability and reusability
//! - Runtime-agnostic code
//!
//! # Architecture
//!
//! The sans-io implementation follows the poll-based pattern:
//!
//! - `handle_input()`: Feed incoming bytes to the state machine
//! - `poll_transmit()`: Get outgoing data to send
//! - `poll_event()`: Get protocol events (replies, requests, etc.)
//!
//! # Example
//!
//! ```no_run
//! use varlink::sansio::Client;
//! use varlink::Request;
//! use std::borrow::Cow;
//! use std::io::{Read, Write};
//!
//! let mut client = Client::new();
//!
//! // Create a request
//! let request = Request {
//! method: Cow::Borrowed("org.example.Method"),
//! parameters: None,
//! more: None,
//! oneway: None,
//! upgrade: None,
//! };
//!
//! // Queue the request
//! client.send_request("org.example.Method".into(), request)?;
//!
//! // In your event loop (pseudo-code):
//! # let mut socket = std::io::empty(); // Placeholder for example
//! # let mut buf = [0u8; 8192];
//! // 1. Send data
//! while let Some(transmit) = client.poll_transmit() {
//! socket.write_all(&transmit.payload)?;
//! }
//!
//! // 2. Receive data
//! let n = socket.read(&mut buf)?;
//! client.handle_input(&buf[..n])?;
//!
//! // 3. Process events
//! while let Some(event) = client.poll_event() {
//! // Handle event
//! }
//! # Ok::<(), Box<dyn std::error::Error>>(())
//! ```
pub use Client;
pub use ;
pub use Server;
pub use ;