You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
1.8 KiB

//! Configuration
use super::*;
use sock::SocketAddr;
pub const DEFAULT_BUFFER_SIZE: usize = 4096;
/// What kind of compression to use
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Copy)]
#[repr(u8)]
pub enum CompressionKind
{
Brotli,
GZip,
BZ2,
}
// -- serve / conn --
/// Server configuration
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ServerConfig
{
pub bind: SocketAddr,
pub oneshot: bool,
}
/// Client configuration
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ClientConfig
{
pub connect: SocketAddr,
pub retry: usize,
}
// -- send / recv ---
/// Specifying a sending name, or send the filename
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum SendingName
{
Filename,
Specific(String),
}
impl Default for SendingName
{
#[inline]
fn default() -> Self
{
Self::Filename
}
}
/// Configuration for sending file
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct SendConfig
{
pub encrypt: bool,
pub sign: bool,
pub compress: Option<CompressionKind>,
pub buffer_size: usize,
pub continuation: bool,
pub name: Option<SendingName>,
}
/// Configuration for receiving file
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct RecvConfig
{
pub interactive: bool,
pub name: SendingName,
}
// -- modes --
/// Mode of file
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum TransferMode
{
Send(SendConfig),
Recv(RecvConfig),
}
/// Configuration of connection
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ConnectionMode
{
Server(ServerConfig),
Client(ClientConfig),
}
// --
/// Full program configuration
///
/// You should box this, it's big.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Config
{
pub file: TransferMode,
pub connection: ConnectionMode,
}