blob: 64a931c162f6953cf810818aea0117155a554c08 [file] [log] [blame]
use crate::configs::http::{
HttpConfig, HttpCorsConfig, HttpJwtConfig, HttpMetricsConfig, HttpTlsConfig,
};
use crate::configs::quic::{QuicCertificateConfig, QuicConfig};
use crate::configs::server::{
MessageCleanerConfig, MessageSaverConfig, PersonalAccessTokenCleanerConfig,
PersonalAccessTokenConfig, ServerConfig,
};
use crate::configs::system::{
BackupConfig, CacheConfig, CompatibilityConfig, CompressionConfig, DatabaseConfig,
EncryptionConfig, LoggingConfig, MessageDeduplicationConfig, PartitionConfig,
RetentionPolicyConfig, RuntimeConfig, SegmentConfig, StreamConfig, SystemConfig, TopicConfig,
};
use crate::configs::tcp::{TcpConfig, TcpTlsConfig};
use std::sync::Arc;
static_toml::static_toml! {
// static_toml crate always starts from CARGO_MANIFEST_DIR (in this case iggy-server root directory)
static SERVER_CONFIG = include_toml!("../configs/server.toml");
}
impl Default for ServerConfig {
fn default() -> ServerConfig {
ServerConfig {
message_cleaner: MessageCleanerConfig::default(),
message_saver: MessageSaverConfig::default(),
personal_access_token: PersonalAccessTokenConfig::default(),
system: Arc::new(SystemConfig::default()),
quic: QuicConfig::default(),
tcp: TcpConfig::default(),
http: HttpConfig::default(),
}
}
}
impl Default for QuicConfig {
fn default() -> QuicConfig {
QuicConfig {
enabled: true,
address: SERVER_CONFIG.quic.address.parse().unwrap(),
max_concurrent_bidi_streams: SERVER_CONFIG.quic.max_concurrent_bidi_streams as u64,
datagram_send_buffer_size: SERVER_CONFIG
.quic
.datagram_send_buffer_size
.parse()
.unwrap(),
initial_mtu: SERVER_CONFIG.quic.initial_mtu.parse().unwrap(),
send_window: SERVER_CONFIG.quic.send_window.parse().unwrap(),
receive_window: SERVER_CONFIG.quic.receive_window.parse().unwrap(),
keep_alive_interval: SERVER_CONFIG.quic.keep_alive_interval.parse().unwrap(),
max_idle_timeout: SERVER_CONFIG.quic.max_idle_timeout.parse().unwrap(),
certificate: QuicCertificateConfig::default(),
}
}
}
impl Default for QuicCertificateConfig {
fn default() -> QuicCertificateConfig {
QuicCertificateConfig {
self_signed: SERVER_CONFIG.quic.certificate.self_signed,
cert_file: SERVER_CONFIG.quic.certificate.cert_file.parse().unwrap(),
key_file: SERVER_CONFIG.quic.certificate.key_file.parse().unwrap(),
}
}
}
impl Default for TcpConfig {
fn default() -> TcpConfig {
TcpConfig {
enabled: SERVER_CONFIG.tcp.enabled,
address: SERVER_CONFIG.tcp.address.parse().unwrap(),
tls: TcpTlsConfig::default(),
}
}
}
impl Default for TcpTlsConfig {
fn default() -> TcpTlsConfig {
TcpTlsConfig {
enabled: SERVER_CONFIG.tcp.tls.enabled,
certificate: SERVER_CONFIG.tcp.tls.certificate.parse().unwrap(),
password: SERVER_CONFIG.tcp.tls.password.parse().unwrap(),
}
}
}
impl Default for HttpConfig {
fn default() -> HttpConfig {
HttpConfig {
enabled: true,
address: SERVER_CONFIG.http.address.parse().unwrap(),
max_request_size: SERVER_CONFIG.http.max_request_size.parse().unwrap(),
cors: HttpCorsConfig::default(),
jwt: HttpJwtConfig::default(),
metrics: HttpMetricsConfig::default(),
tls: HttpTlsConfig::default(),
}
}
}
impl Default for HttpCorsConfig {
fn default() -> HttpCorsConfig {
HttpCorsConfig {
enabled: SERVER_CONFIG.http.cors.enabled,
allowed_methods: SERVER_CONFIG
.http
.cors
.allowed_methods
.iter()
.map(|s| s.parse().unwrap())
.collect(),
allowed_origins: SERVER_CONFIG
.http
.cors
.allowed_origins
.iter()
.map(|s| s.parse().unwrap())
.collect(),
allowed_headers: SERVER_CONFIG
.http
.cors
.allowed_headers
.iter()
.map(|s| s.parse().unwrap())
.collect(),
exposed_headers: SERVER_CONFIG
.http
.cors
.exposed_headers
.iter()
.map(|s| s.parse().unwrap())
.collect(),
allow_credentials: SERVER_CONFIG.http.cors.allow_credentials,
allow_private_network: SERVER_CONFIG.http.cors.allow_private_network,
}
}
}
impl Default for HttpJwtConfig {
fn default() -> HttpJwtConfig {
HttpJwtConfig {
algorithm: SERVER_CONFIG.http.jwt.algorithm.parse().unwrap(),
issuer: SERVER_CONFIG.http.jwt.issuer.parse().unwrap(),
audience: SERVER_CONFIG.http.jwt.audience.parse().unwrap(),
valid_issuers: SERVER_CONFIG
.http
.jwt
.valid_issuers
.iter()
.map(|s| s.parse().unwrap())
.collect(),
valid_audiences: SERVER_CONFIG
.http
.jwt
.valid_audiences
.iter()
.map(|s| s.parse().unwrap())
.collect(),
access_token_expiry: SERVER_CONFIG.http.jwt.access_token_expiry.parse().unwrap(),
refresh_token_expiry: SERVER_CONFIG.http.jwt.refresh_token_expiry.parse().unwrap(),
clock_skew: SERVER_CONFIG.http.jwt.clock_skew.parse().unwrap(),
not_before: SERVER_CONFIG.http.jwt.not_before.parse().unwrap(),
encoding_secret: SERVER_CONFIG.http.jwt.encoding_secret.parse().unwrap(),
decoding_secret: SERVER_CONFIG.http.jwt.decoding_secret.parse().unwrap(),
use_base64_secret: SERVER_CONFIG.http.jwt.use_base_64_secret,
}
}
}
impl Default for HttpMetricsConfig {
fn default() -> HttpMetricsConfig {
HttpMetricsConfig {
enabled: SERVER_CONFIG.http.metrics.enabled,
endpoint: SERVER_CONFIG.http.metrics.endpoint.parse().unwrap(),
}
}
}
impl Default for HttpTlsConfig {
fn default() -> HttpTlsConfig {
HttpTlsConfig {
enabled: SERVER_CONFIG.http.tls.enabled,
cert_file: SERVER_CONFIG.http.tls.cert_file.parse().unwrap(),
key_file: SERVER_CONFIG.http.tls.key_file.parse().unwrap(),
}
}
}
impl Default for MessageCleanerConfig {
fn default() -> MessageCleanerConfig {
MessageCleanerConfig {
enabled: SERVER_CONFIG.message_cleaner.enabled,
interval: SERVER_CONFIG.message_cleaner.interval.parse().unwrap(),
}
}
}
impl Default for MessageSaverConfig {
fn default() -> MessageSaverConfig {
MessageSaverConfig {
enabled: SERVER_CONFIG.message_saver.enabled,
enforce_fsync: SERVER_CONFIG.message_saver.enforce_fsync,
interval: SERVER_CONFIG.message_saver.interval.parse().unwrap(),
}
}
}
impl Default for PersonalAccessTokenConfig {
fn default() -> PersonalAccessTokenConfig {
PersonalAccessTokenConfig {
max_tokens_per_user: SERVER_CONFIG.personal_access_token.max_tokens_per_user as u32,
cleaner: PersonalAccessTokenCleanerConfig::default(),
}
}
}
impl Default for PersonalAccessTokenCleanerConfig {
fn default() -> PersonalAccessTokenCleanerConfig {
PersonalAccessTokenCleanerConfig {
enabled: SERVER_CONFIG.personal_access_token.cleaner.enabled,
interval: SERVER_CONFIG
.personal_access_token
.cleaner
.interval
.parse()
.unwrap(),
}
}
}
impl Default for SystemConfig {
fn default() -> SystemConfig {
SystemConfig {
path: SERVER_CONFIG.system.path.parse().unwrap(),
backup: BackupConfig::default(),
database: DatabaseConfig::default(),
runtime: RuntimeConfig::default(),
logging: LoggingConfig::default(),
cache: CacheConfig::default(),
retention_policy: RetentionPolicyConfig::default(),
stream: StreamConfig::default(),
encryption: EncryptionConfig::default(),
topic: TopicConfig::default(),
partition: PartitionConfig::default(),
segment: SegmentConfig::default(),
compression: CompressionConfig::default(),
message_deduplication: MessageDeduplicationConfig::default(),
}
}
}
impl Default for BackupConfig {
fn default() -> BackupConfig {
BackupConfig {
path: SERVER_CONFIG.system.backup.path.parse().unwrap(),
compatibility: CompatibilityConfig::default(),
}
}
}
impl Default for CompatibilityConfig {
fn default() -> Self {
CompatibilityConfig {
path: SERVER_CONFIG
.system
.backup
.compatibility
.path
.parse()
.unwrap(),
}
}
}
impl Default for DatabaseConfig {
fn default() -> DatabaseConfig {
DatabaseConfig {
path: SERVER_CONFIG.system.database.path.parse().unwrap(),
}
}
}
impl Default for RuntimeConfig {
fn default() -> RuntimeConfig {
RuntimeConfig {
path: SERVER_CONFIG.system.runtime.path.parse().unwrap(),
}
}
}
impl Default for CompressionConfig {
fn default() -> Self {
CompressionConfig {
allow_override: SERVER_CONFIG.system.compression.allow_override,
default_algorithm: SERVER_CONFIG
.system
.compression
.default_algorithm
.parse()
.unwrap(),
}
}
}
impl Default for LoggingConfig {
fn default() -> LoggingConfig {
LoggingConfig {
path: SERVER_CONFIG.system.logging.path.parse().unwrap(),
level: SERVER_CONFIG.system.logging.level.parse().unwrap(),
max_size: SERVER_CONFIG.system.logging.max_size.parse().unwrap(),
retention: SERVER_CONFIG.system.logging.retention.parse().unwrap(),
sysinfo_print_interval: SERVER_CONFIG
.system
.logging
.sysinfo_print_interval
.parse()
.unwrap(),
}
}
}
impl Default for CacheConfig {
fn default() -> CacheConfig {
CacheConfig {
enabled: SERVER_CONFIG.system.cache.enabled,
size: SERVER_CONFIG.system.cache.size.parse().unwrap(),
}
}
}
impl Default for RetentionPolicyConfig {
fn default() -> RetentionPolicyConfig {
RetentionPolicyConfig {
message_expiry: SERVER_CONFIG
.system
.retention_policy
.message_expiry
.parse()
.unwrap(),
max_topic_size: SERVER_CONFIG
.system
.retention_policy
.max_topic_size
.parse()
.unwrap(),
}
}
}
impl Default for EncryptionConfig {
fn default() -> EncryptionConfig {
EncryptionConfig {
enabled: SERVER_CONFIG.system.encryption.enabled,
key: SERVER_CONFIG.system.encryption.key.parse().unwrap(),
}
}
}
impl Default for StreamConfig {
fn default() -> StreamConfig {
StreamConfig {
path: SERVER_CONFIG.system.stream.path.parse().unwrap(),
}
}
}
impl Default for TopicConfig {
fn default() -> TopicConfig {
TopicConfig {
path: SERVER_CONFIG.system.topic.path.parse().unwrap(),
}
}
}
impl Default for PartitionConfig {
fn default() -> PartitionConfig {
PartitionConfig {
path: SERVER_CONFIG.system.partition.path.parse().unwrap(),
messages_required_to_save: SERVER_CONFIG.system.partition.messages_required_to_save
as u32,
enforce_fsync: SERVER_CONFIG.system.partition.enforce_fsync,
validate_checksum: SERVER_CONFIG.system.partition.validate_checksum,
}
}
}
impl Default for SegmentConfig {
fn default() -> SegmentConfig {
SegmentConfig {
size: SERVER_CONFIG.system.segment.size.parse().unwrap(),
cache_indexes: SERVER_CONFIG.system.segment.cache_indexes,
cache_time_indexes: SERVER_CONFIG.system.segment.cache_time_indexes,
}
}
}
impl Default for MessageDeduplicationConfig {
fn default() -> MessageDeduplicationConfig {
MessageDeduplicationConfig {
enabled: SERVER_CONFIG.system.message_deduplication.enabled,
max_entries: SERVER_CONFIG.system.message_deduplication.max_entries as u64,
expiry: SERVER_CONFIG
.system
.message_deduplication
.expiry
.parse()
.unwrap(),
}
}
}