blob: 0afd75ae06aa11cf18ab192e7cfa34986ffc80cd [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::{
CacheConfig, CompressionConfig, DatabaseConfig, EncryptionConfig, LoggingConfig,
MessageDeduplicationConfig, PartitionConfig, RetentionPolicyConfig, RuntimeConfig,
SegmentConfig, StreamConfig, SystemConfig, TopicConfig,
};
use crate::configs::tcp::{TcpConfig, TcpTlsConfig};
use std::sync::Arc;
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: "127.0.0.1:8080".to_string(),
max_concurrent_bidi_streams: 10000,
datagram_send_buffer_size: "100KB".parse().unwrap(),
initial_mtu: "10KB".parse().unwrap(),
send_window: "100KB".parse().unwrap(),
receive_window: "100KB".parse().unwrap(),
keep_alive_interval: "5s".parse().unwrap(),
max_idle_timeout: "10s".parse().unwrap(),
certificate: QuicCertificateConfig::default(),
}
}
}
impl Default for QuicCertificateConfig {
fn default() -> QuicCertificateConfig {
QuicCertificateConfig {
self_signed: true,
cert_file: "certs/iggy_cert.pem".to_string(),
key_file: "certs/iggy_key.pem".to_string(),
}
}
}
impl Default for TcpConfig {
fn default() -> TcpConfig {
TcpConfig {
enabled: true,
address: "127.0.0.1:8090".to_string(),
tls: TcpTlsConfig::default(),
}
}
}
impl Default for HttpConfig {
fn default() -> HttpConfig {
HttpConfig {
enabled: true,
address: "127.0.0.1:3000".to_string(),
cors: HttpCorsConfig::default(),
jwt: HttpJwtConfig::default(),
metrics: HttpMetricsConfig::default(),
tls: HttpTlsConfig::default(),
}
}
}
impl Default for HttpJwtConfig {
fn default() -> HttpJwtConfig {
HttpJwtConfig {
algorithm: "HS256".to_string(),
issuer: "iggy".to_string(),
audience: "iggy".to_string(),
valid_issuers: vec!["iggy".to_string()],
valid_audiences: vec!["iggy".to_string()],
access_token_expiry: "1h".parse().unwrap(),
refresh_token_expiry: "1d".parse().unwrap(),
clock_skew: "5s".parse().unwrap(),
not_before: "0s".parse().unwrap(),
encoding_secret: "top_secret$iggy.rs$_jwt_HS256_key#!".to_string(),
decoding_secret: "top_secret$iggy.rs$_jwt_HS256_key#!".to_string(),
use_base64_secret: false,
}
}
}
impl Default for MessageCleanerConfig {
fn default() -> MessageCleanerConfig {
MessageCleanerConfig {
enabled: true,
interval: "1m".parse().unwrap(),
}
}
}
impl Default for MessageSaverConfig {
fn default() -> MessageSaverConfig {
MessageSaverConfig {
enabled: true,
enforce_fsync: true,
interval: "30s".parse().unwrap(),
}
}
}
impl Default for PersonalAccessTokenConfig {
fn default() -> PersonalAccessTokenConfig {
PersonalAccessTokenConfig {
max_tokens_per_user: 100,
cleaner: PersonalAccessTokenCleanerConfig::default(),
}
}
}
impl Default for PersonalAccessTokenCleanerConfig {
fn default() -> PersonalAccessTokenCleanerConfig {
PersonalAccessTokenCleanerConfig {
enabled: true,
interval: "1m".parse().unwrap(),
}
}
}
impl Default for SystemConfig {
fn default() -> SystemConfig {
SystemConfig {
path: "local_data".to_string(),
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 DatabaseConfig {
fn default() -> DatabaseConfig {
DatabaseConfig {
path: "database".to_string(),
}
}
}
impl Default for RuntimeConfig {
fn default() -> RuntimeConfig {
RuntimeConfig {
path: "runtime".to_string(),
}
}
}
impl Default for CompressionConfig {
fn default() -> Self {
CompressionConfig {
allow_override: false,
default_algorithm: "none".parse().unwrap(),
}
}
}
impl Default for LoggingConfig {
fn default() -> LoggingConfig {
LoggingConfig {
path: "logs".to_string(),
level: "info".to_string(),
max_size: "200 MB".parse().unwrap(),
retention: "7 days".parse().unwrap(),
}
}
}
impl Default for CacheConfig {
fn default() -> CacheConfig {
CacheConfig {
enabled: true,
size: "2 GB".parse().unwrap(),
}
}
}
impl Default for RetentionPolicyConfig {
fn default() -> RetentionPolicyConfig {
RetentionPolicyConfig {
message_expiry: "0".parse().unwrap(),
max_topic_size: "10 GB".parse().unwrap(),
}
}
}
impl Default for StreamConfig {
fn default() -> StreamConfig {
StreamConfig {
path: "streams".to_string(),
}
}
}
impl Default for TopicConfig {
fn default() -> TopicConfig {
TopicConfig {
path: "topics".to_string(),
}
}
}
impl Default for PartitionConfig {
fn default() -> PartitionConfig {
PartitionConfig {
path: "partitions".to_string(),
messages_required_to_save: 1000,
enforce_fsync: false,
validate_checksum: false,
}
}
}
impl Default for SegmentConfig {
fn default() -> SegmentConfig {
SegmentConfig {
size: "1 GB".parse().unwrap(),
cache_indexes: true,
cache_time_indexes: true,
}
}
}
impl Default for MessageDeduplicationConfig {
fn default() -> MessageDeduplicationConfig {
MessageDeduplicationConfig {
enabled: false,
max_entries: 1000,
expiry: "1m".parse().unwrap(),
}
}
}