use schemars::JsonSchema;
use serde::Deserialize;
use summer::config::Configurable;
use std::{
net::{IpAddr, Ipv4Addr},
time::Duration,
};
summer::submit_config_schema!("grpc", GrpcConfig);
#[derive(Debug, Configurable, JsonSchema, Deserialize)]
#[config_prefix = "grpc"]
pub struct GrpcConfig {
#[serde(default = "default_binding")]
pub(crate) binding: IpAddr,
#[serde(default = "default_port")]
pub(crate) port: u16,
pub(crate) concurrency_limit_per_connection: Option<usize>,
pub(crate) timeout: Option<Duration>,
pub(crate) initial_stream_window_size: Option<u32>,
pub(crate) initial_connection_window_size: Option<u32>,
pub(crate) max_concurrent_streams: Option<u32>,
pub(crate) max_connection_age: Option<Duration>,
pub(crate) http2_keepalive_interval: Option<Duration>,
pub(crate) http2_keepalive_timeout: Option<Duration>,
pub(crate) http2_adaptive_window: Option<bool>,
pub(crate) http2_max_pending_accept_reset_streams: Option<usize>,
pub(crate) tcp_keepalive: Option<Duration>,
#[serde(default)]
pub(crate) tcp_nodelay: bool,
pub(crate) http2_max_header_list_size: Option<u32>,
pub(crate) max_frame_size: Option<u32>,
#[serde(default)]
pub(crate) accept_http1: bool,
#[serde(default)]
pub(crate) graceful: bool,
}
fn default_binding() -> IpAddr {
IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0))
}
fn default_port() -> u16 {
9090
}