pub use crate::announce_address::{AnnounceAddress, PeerConnectionDetails};
use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Hash, Eq)]
pub enum Request {
Ls(IndexQuery),
Read(ReadQuery),
AnnouncePeer(AnnouncePeer),
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Eq, Hash, Default)]
pub struct IndexQuery {
pub path: Option<String>,
pub searchterm: Option<String>,
pub recursive: bool,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Eq, Hash)]
pub struct ReadQuery {
pub path: String,
pub start: Option<u64>,
pub end: Option<u64>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub enum LsResponse {
Success(Vec<Entry>),
Err(LsResponseError),
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Hash, Eq)]
pub struct Entry {
pub name: String,
pub size: u64,
pub is_dir: bool,
}
#[derive(Error, Serialize, Deserialize, PartialEq, Debug, Clone)]
pub enum LsResponseError {
#[error("Database error")]
DbError,
#[error("Path not found")]
PathNotFound,
#[error("Internal error: {0}")]
InternalServer(String),
}
#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone, Hash)]
pub struct AnnouncePeer {
pub announce_address: AnnounceAddress,
}