const LINK_ARGS_METADATA_KEY: &str = "LINK_ARGS";
fn decode_link_args(get_var: impl Fn(&str) -> Option<String>, prefix: &str) -> Vec<String> {
let count: usize = get_var(&format!("{prefix}_{LINK_ARGS_METADATA_KEY}_COUNT"))
.and_then(|value| value.parse().ok())
.unwrap_or(0);
let mut args = Vec::with_capacity(count);
for index in 0..count {
match get_var(&format!("{prefix}_{LINK_ARGS_METADATA_KEY}_{index}")) {
Some(value) => args.push(value),
None => return Vec::new(),
}
}
args
}
fn encode_link_args(args: &[String]) -> Vec<(String, String)> {
let mut pairs = Vec::with_capacity(args.len() + 1);
pairs.push((
format!("{LINK_ARGS_METADATA_KEY}_COUNT"),
args.len().to_string(),
));
for (index, arg) in args.iter().enumerate() {
pairs.push((format!("{LINK_ARGS_METADATA_KEY}_{index}"), arg.clone()));
}
pairs
}