use crate::compose::types::VolumeConfig;
use super::{safe_unit_stem, sorted_label_pairs, QuadletUnit, Section};
pub(crate) fn volume_unit(name: &str, project: &str, config: Option<&VolumeConfig>) -> QuadletUnit {
let mut vol = Section::new("Volume");
let vol_name = config
.and_then(|c| c.name.clone())
.unwrap_or_else(|| format!("{project}_{name}"));
vol.add("VolumeName", vol_name);
if let Some(cfg) = config {
if let Some(driver) = &cfg.driver {
vol.add("Driver", driver.clone());
}
for (key, val) in sorted_label_pairs(cfg.driver_opts.clone()) {
match key.as_str() {
"type" => vol.add("Type", val),
"device" => vol.add("Device", val),
"o" => vol.add("Options", val),
_ => vol.add("PodmanArgs", format!("--opt {key}={val}")),
}
}
for (key, val) in sorted_label_pairs(cfg.labels.to_map()) {
vol.add("Label", format!("{key}={val}"));
}
}
let contents = vol.render();
QuadletUnit {
filename: format!("{}.volume", safe_unit_stem(name)),
contents,
}
}