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 max_message_size: usize,
pub compression: bool,
#[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,
max_message_size: 16 * 1024 * 1024, compression: false,
#[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 {
#[cfg(feature = "config")]
{
if let Some(cfg) = crate::config::try_get()
&& let Ok(grpc) = cfg.unmarshal_key_registered::<Self>("grpc")
{
return grpc;
}
}
Self::default()
}
#[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
}
}