in core/sdk/src/client.rs [560:629]
fn parse_options(options: &str) -> Result<ConnectionStringOptions, IggyError> {
let options = options.split('&').collect::<Vec<&str>>();
let mut tls_enabled = false;
let mut tls_domain = "localhost".to_string();
let mut tls_ca_file = None;
let mut reconnection_retries = "unlimited".to_owned();
let mut reconnection_interval = "1s".to_owned();
let mut reestablish_after = "5s".to_owned();
let mut heartbeat_interval = "5s".to_owned();
let mut nodelay = false;
for option in options {
let option_parts = option.split('=').collect::<Vec<&str>>();
if option_parts.len() != 2 {
return Err(IggyError::InvalidConnectionString);
}
match option_parts[0] {
"tls" => {
tls_enabled = option_parts[1] == "true";
}
"tls_domain" => {
tls_domain = option_parts[1].to_string();
}
"tls_ca_file" => {
tls_ca_file = Some(option_parts[1].to_string());
}
"reconnection_retries" => {
reconnection_retries = option_parts[1].to_string();
}
"reconnection_interval" => {
reconnection_interval = option_parts[1].to_string();
}
"reestablish_after" => {
reestablish_after = option_parts[1].to_string();
}
"heartbeat_interval" => {
heartbeat_interval = option_parts[1].to_string();
}
"nodelay" => {
nodelay = option_parts[1] == "true";
}
_ => {
return Err(IggyError::InvalidConnectionString);
}
}
}
Ok(ConnectionStringOptions {
tls_enabled,
tls_domain,
tls_ca_file,
heartbeat_interval: IggyDuration::from_str(heartbeat_interval.as_str())
.map_err(|_| IggyError::InvalidConnectionString)?,
reconnection: TcpClientReconnectionConfig {
enabled: true,
max_retries: match reconnection_retries.as_str() {
"unlimited" => None,
_ => Some(
reconnection_retries
.parse()
.map_err(|_| IggyError::InvalidNumberValue)?,
),
},
interval: IggyDuration::from_str(reconnection_interval.as_str())
.map_err(|_| IggyError::InvalidConnectionString)?,
reestablish_after: IggyDuration::from_str(reestablish_after.as_str())
.map_err(|_| IggyError::InvalidConnectionString)?,
},
nodelay,
})
}