Skip to main content

libvirt_xdr/
lib.rs

1//! XDR (External Data Representation) serialization for libvirt protocol.
2//!
3//! This crate provides serde-based serialization and deserialization
4//! for the XDR binary format used by libvirt's RPC protocol.
5
6mod de;
7mod error;
8pub mod opaque;
9mod ser;
10
11pub use de::XdrDeserializer;
12pub use error::{Error, Result};
13pub use ser::XdrSerializer;
14
15use serde::{de::DeserializeOwned, Serialize};
16
17/// Serialize a value to XDR bytes.
18pub fn to_bytes<T: Serialize>(value: &T) -> Result<Vec<u8>> {
19    let mut serializer = XdrSerializer::new();
20    value.serialize(&mut serializer)?;
21    Ok(serializer.into_bytes())
22}
23
24/// Deserialize a value from XDR bytes.
25pub fn from_bytes<T: DeserializeOwned>(bytes: &[u8]) -> Result<T> {
26    let mut deserializer = XdrDeserializer::new(bytes);
27    T::deserialize(&mut deserializer)
28}