mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-08-10 06:26:52 +00:00
Merge branch 'main' into next
This commit is contained in:
+5
-4
@@ -7,6 +7,7 @@ use std::path::PathBuf;
|
||||
use serde::{de, Deserialize};
|
||||
|
||||
use crate::error::Error;
|
||||
use crate::socket_address::UnixOrTCPSocketAddress;
|
||||
|
||||
/// Represent the whole configuration
|
||||
#[derive(Deserialize, Debug, Clone)]
|
||||
@@ -129,7 +130,7 @@ pub struct DataDir {
|
||||
#[derive(Deserialize, Debug, Clone)]
|
||||
pub struct S3ApiConfig {
|
||||
/// Address and port to bind for api serving
|
||||
pub api_bind_addr: Option<SocketAddr>,
|
||||
pub api_bind_addr: Option<UnixOrTCPSocketAddress>,
|
||||
/// S3 region to use
|
||||
pub s3_region: String,
|
||||
/// Suffix to remove from domain name to find bucket. If None,
|
||||
@@ -141,14 +142,14 @@ pub struct S3ApiConfig {
|
||||
#[derive(Deserialize, Debug, Clone)]
|
||||
pub struct K2VApiConfig {
|
||||
/// Address and port to bind for api serving
|
||||
pub api_bind_addr: SocketAddr,
|
||||
pub api_bind_addr: UnixOrTCPSocketAddress,
|
||||
}
|
||||
|
||||
/// Configuration for serving files as normal web server
|
||||
#[derive(Deserialize, Debug, Clone)]
|
||||
pub struct WebConfig {
|
||||
/// Address and port to bind for web serving
|
||||
pub bind_addr: SocketAddr,
|
||||
pub bind_addr: UnixOrTCPSocketAddress,
|
||||
/// Suffix to remove from domain name to find bucket
|
||||
pub root_domain: String,
|
||||
}
|
||||
@@ -157,7 +158,7 @@ pub struct WebConfig {
|
||||
#[derive(Deserialize, Debug, Clone, Default)]
|
||||
pub struct AdminConfig {
|
||||
/// Address and port to bind for admin API serving
|
||||
pub api_bind_addr: Option<SocketAddr>,
|
||||
pub api_bind_addr: Option<UnixOrTCPSocketAddress>,
|
||||
|
||||
/// Bearer token to use to scrape metrics
|
||||
pub metrics_token: Option<String>,
|
||||
|
||||
@@ -14,6 +14,7 @@ pub mod forwarded_headers;
|
||||
pub mod metrics;
|
||||
pub mod migrate;
|
||||
pub mod persister;
|
||||
pub mod socket_address;
|
||||
pub mod time;
|
||||
pub mod tranquilizer;
|
||||
pub mod version;
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
use std::fmt::{Debug, Display, Formatter};
|
||||
use std::net::SocketAddr;
|
||||
use std::path::PathBuf;
|
||||
use std::str::FromStr;
|
||||
|
||||
use serde::de::Error;
|
||||
use serde::{Deserialize, Deserializer};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum UnixOrTCPSocketAddress {
|
||||
TCPSocket(SocketAddr),
|
||||
UnixSocket(PathBuf),
|
||||
}
|
||||
|
||||
impl Display for UnixOrTCPSocketAddress {
|
||||
fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
UnixOrTCPSocketAddress::TCPSocket(address) => write!(formatter, "http://{}", address),
|
||||
UnixOrTCPSocketAddress::UnixSocket(path) => {
|
||||
write!(formatter, "http+unix://{}", path.to_string_lossy())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> Deserialize<'de> for UnixOrTCPSocketAddress {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let string = String::deserialize(deserializer)?;
|
||||
let string = string.as_str();
|
||||
|
||||
if string.starts_with("/") {
|
||||
Ok(UnixOrTCPSocketAddress::UnixSocket(
|
||||
PathBuf::from_str(string).map_err(Error::custom)?,
|
||||
))
|
||||
} else {
|
||||
Ok(UnixOrTCPSocketAddress::TCPSocket(
|
||||
SocketAddr::from_str(string).map_err(Error::custom)?,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user