use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct GrpcConfig {
pub listen: Option<String>,
pub endpoint: Option<String>,
pub recv_buffer_size: usize,
pub recv_timeout_ms: u64,
pub send_timeout_ms: u64,
pub max_message_size: usize,
pub compression: bool,
#[serde(default)]
pub tls_enabled: bool,
#[serde(default)]
pub tls_ca_path: Option<String>,
#[serde(default)]
pub tls_domain: Option<String>,
#[serde(default)]
pub tls_client_cert_path: Option<String>,
#[serde(default)]
pub tls_client_key_path: Option<String>,
#[cfg(feature = "transport-grpc-vector-compat")]
pub vector_compat: bool,
pub filters_in: Vec<crate::transport::filter::FilterRule>,
pub filters_out: Vec<crate::transport::filter::FilterRule>,
}
impl Default for GrpcConfig {
fn default() -> Self {
Self {
listen: None,
endpoint: None,
recv_buffer_size: 10_000,
recv_timeout_ms: 100,
send_timeout_ms: 30_000, max_message_size: 16 * 1024 * 1024, compression: false,
tls_enabled: false,
tls_ca_path: None,
tls_domain: None,
tls_client_cert_path: None,
tls_client_key_path: None,
#[cfg(feature = "transport-grpc-vector-compat")]
vector_compat: false,
filters_in: Vec::new(),
filters_out: Vec::new(),
}
}
}
impl GrpcConfig {
#[must_use]
pub fn from_cascade() -> Self {
<Self as crate::transport::traits::FromCascade>::from_cascade_key("grpc")
}
#[must_use]
pub fn server(listen: &str) -> Self {
Self {
listen: Some(listen.to_string()),
..Default::default()
}
}
#[must_use]
pub fn client(endpoint: &str) -> Self {
Self {
endpoint: Some(endpoint.to_string()),
..Default::default()
}
}
#[must_use]
pub fn with_compression(mut self) -> Self {
self.compression = true;
self
}
#[must_use]
pub fn with_max_message_size(mut self, size: usize) -> Self {
self.max_message_size = size;
self
}
#[cfg(feature = "transport-grpc-vector-compat")]
#[must_use]
pub fn with_vector_compat(mut self) -> Self {
self.vector_compat = true;
self
}
}
impl crate::transport::traits::FromCascade for GrpcConfig {}