use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct RvMetadataRequest {
pub handle: RvHandleWire,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataMetadata {
pub total_len: u64,
pub refcount: u32,
pub pinned: bool,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RvAcquireRequest {
pub handle: RvHandleWire,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum AcquireResponse {
Ready {
lease_id: u64,
transfer_id: u64,
total_len: u64,
chunk_size: u32,
chunk_count: u32,
},
Rdma { lease_id: u64, descriptor: Vec<u8> },
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RvPullRequest {
pub transfer_id: u64,
pub chunk_index: u32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RvRefRequest {
pub handle: RvHandleWire,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RvDetachRequest {
pub handle: RvHandleWire,
pub lease_id: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RvReleaseRequest {
pub handle: RvHandleWire,
pub lease_id: u64,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub struct RvHandleWire {
pub hi: u64,
pub lo: u64,
}
impl RvHandleWire {
pub fn from_handle(handle: crate::DataHandle) -> Self {
let raw = handle.as_u128();
Self {
hi: (raw >> 64) as u64,
lo: raw as u64,
}
}
pub fn to_handle(self) -> crate::DataHandle {
crate::DataHandle::from_u128(((self.hi as u128) << 64) | (self.lo as u128))
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RvError {
pub message: String,
}