use std::time::Duration;
pub use libipld::Cid;
use serde::{Deserialize, Serialize};
use crate::language::Query;
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct PrefetchRequest {
pub query: Query,
pub duration: Duration,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct DirectoryChild {
pub size: u64,
pub name: String,
#[serde(with = "serde_str")]
pub cid: Cid,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum FilesGetResponse {
File {
name: String,
bytes: Vec<u8>,
mime: String,
},
Directory {
name: String,
#[serde(with = "serde_str")]
cid: Cid,
children: Vec<DirectoryChild>,
},
}
mod serde_str {
use std::fmt::Display;
use std::str::FromStr;
use serde::{de, Deserialize, Deserializer, Serializer};
pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
where
T: Display,
S: Serializer,
{
serializer.collect_str(value)
}
pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
where
T: FromStr,
T::Err: Display,
D: Deserializer<'de>,
{
String::deserialize(deserializer)?.parse().map_err(de::Error::custom)
}
}