use anyhow::{Context, Result};
use zenoh::Session;
pub async fn open(connect: &[String], listen: &[String], scouting: bool) -> Result<Session> {
let mut config = zenoh::Config::default();
let json_list = |v: &[String]| {
let items: Vec<String> = v.iter().map(|e| format!("{e:?}")).collect();
format!("[{}]", items.join(","))
};
config
.insert_json5("scouting/multicast/enabled", &scouting.to_string())
.ok();
if !connect.is_empty() {
config
.insert_json5("connect/endpoints", &json_list(connect))
.ok();
}
if !listen.is_empty() {
config
.insert_json5("listen/endpoints", &json_list(listen))
.ok();
}
zenoh::open(config)
.await
.map_err(|e| anyhow::anyhow!("{e}"))
.context("failed to open Zenoh session")
}