#[cfg_attr(feature = "clap", derive(clap::Args))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[allow(clippy::struct_excessive_bools, clippy::doc_markdown)]
#[derive(Debug, Default)]
#[non_exhaustive]
pub struct UserOptions {
#[cfg(feature = "unix_path_tools")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "unix_path_tools")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(all(feature = "clap", not(unix)), clap(hide = true))]
pub unix_listen_unlink: bool,
#[cfg(feature = "unix_path_tools")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "unix_path_tools")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(all(feature = "clap", not(unix)), clap(hide = true))]
#[cfg_attr(feature = "serde", serde(default))]
pub unix_listen_chmod: Option<crate::UnixChmodVariant>,
#[cfg(feature = "unix_path_tools")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "unix_path_tools")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(all(feature = "clap", not(unix)), clap(hide = true))]
pub unix_listen_uid: Option<u32>,
#[cfg(feature = "unix_path_tools")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "unix_path_tools")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(all(feature = "clap", not(unix)), clap(hide = true))]
pub unix_listen_gid: Option<u32>,
#[cfg(feature = "sd_listen")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "sd_listen")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(all(feature = "clap", not(unix)), clap(hide = true))]
pub sd_accept_ignore_environment: bool,
#[cfg(feature = "socket_options")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "socket_options")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
pub tcp_keepalive: Option<crate::TcpKeepaliveParams>,
#[cfg(feature = "socket_options")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "socket_options")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
pub tcp_reuse_port: bool,
#[cfg(feature = "socket_options")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "socket_options")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
pub recv_buffer_size: Option<usize>,
#[cfg(feature = "socket_options")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "socket_options")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
pub send_buffer_size: Option<usize>,
#[cfg(feature = "socket_options")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "socket_options")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
pub tcp_only_v6: bool,
#[cfg(feature = "socket_options")]
#[cfg_attr(docsrs_alt, doc(cfg(feature = "socket_options")))]
#[cfg_attr(feature = "clap", clap(long))]
#[cfg_attr(feature = "serde", serde(default))]
pub tcp_listen_backlog: Option<u32>,
}
#[non_exhaustive]
#[derive(Debug, Default, Clone, Copy)]
pub struct SystemOptions {
pub sleep_on_errors: bool,
pub nodelay: bool,
}