feat(server): add unix socket support
parent
dca4d2d1ec
commit
be04d0c7fe
|
@ -51,6 +51,7 @@ pub struct ClapConfig {
|
||||||
#[serde(rename_all = "lowercase")]
|
#[serde(rename_all = "lowercase")]
|
||||||
pub enum NetConfigType {
|
pub enum NetConfigType {
|
||||||
Tcp,
|
Tcp,
|
||||||
|
Unix,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Clone, Args, Debug)]
|
#[derive(Serialize, Clone, Args, Debug)]
|
||||||
|
@ -66,6 +67,11 @@ pub struct NetConfig {
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
#[arg(long, value_name = "PORT", global = true)]
|
#[arg(long, value_name = "PORT", global = true)]
|
||||||
port: Option<u16>,
|
port: Option<u16>,
|
||||||
|
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
#[serde(rename = "path")]
|
||||||
|
#[arg(long, value_name = "SOCKET", global = true)]
|
||||||
|
socket: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
|
|
|
@ -65,6 +65,24 @@ pub fn serve(config: &crate::config::Config) -> u8 {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
NetConfig::Unix { path } => {
|
||||||
|
// Try to remove the socket file first if it exists
|
||||||
|
let _ = std::fs::remove_file(&path);
|
||||||
|
|
||||||
|
if let Some(parent) = path.parent() {
|
||||||
|
std::fs::create_dir_all(parent).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing::info!("Listening on Unix socket {:?}", path);
|
||||||
|
|
||||||
|
rt.block_on(async {
|
||||||
|
let listener = tokio::net::UnixListener::bind(path).unwrap();
|
||||||
|
|
||||||
|
axum::serve(listener, app.into_make_service())
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
0
|
0
|
||||||
|
|
|
@ -28,6 +28,7 @@ impl From<LogLevel> for tracing::Level {
|
||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
pub enum NetConfig {
|
pub enum NetConfig {
|
||||||
Tcp { domain: String, port: u16 },
|
Tcp { domain: String, port: u16 },
|
||||||
|
Unix { path: PathBuf },
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
|
|
Loading…
Reference in New Issue