use base64::Engine;
use serde::{Serialize, Serializer};
fn serialize_base64<T: AsRef<[u8]>, S: Serializer>(t: &T, s: S) -> Result<S::Ok, S::Error> {
s.serialize_str(&base64::engine::general_purpose::STANDARD.encode(t.as_ref()))
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LookupParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub snapshot_id: Option<&'a str>,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetattrParams<'a> {
pub model_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub snapshot_id: Option<&'a str>,
pub inode: u64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetTime {
pub sec: i64,
pub nsec: i64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetattrParams<'a> {
pub model_id: &'a str,
pub inode: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub atime: Option<SetTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mtime: Option<SetTime>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MknodParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T,
pub mode: u32,
pub dev: u64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ReadParams<'a> {
pub model_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub snapshot_id: Option<&'a str>,
pub inode: u64,
pub offset: u64,
pub count: u64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct WriteParams<'a> {
pub model_id: &'a str,
pub inode: u64,
#[serde(skip_serializing)]
pub data: &'a [u8],
pub offset: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub truncate: Option<bool>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SymlinkParams<'a, T1: AsRef<[u8]>, T2: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T1,
#[serde(serialize_with = "serialize_base64")]
pub link: T2,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ReadlinkParams<'a> {
pub model_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub snapshot_id: Option<&'a str>,
pub inode: u64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MkdirParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T,
pub mode: u32,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UnlinkParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RmdirParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RenameParams<'a, T1: AsRef<[u8]>, T2: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T1,
pub newparent: u64,
#[serde(serialize_with = "serialize_base64")]
pub newname: T2,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<u32>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LinkParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub inode: u64,
pub newparent: u64,
#[serde(serialize_with = "serialize_base64")]
pub newname: T,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ReaddirParams<'a> {
pub model_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub snapshot_id: Option<&'a str>,
pub inode: u64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RmdirAllParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub parent: u64,
#[serde(serialize_with = "serialize_base64")]
pub name: T,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CopyParams<'a, T: AsRef<[u8]>> {
pub model_id: &'a str,
pub inode: u64,
pub newparent: u64,
#[serde(serialize_with = "serialize_base64")]
pub newname: T,
}