| 4099 | } |
| 4100 | |
| 4101 | fn parse_credential_expiry_pairs(items: &[String]) -> Result<HashMap<String, i64>> { |
| 4102 | let mut map = HashMap::new(); |
| 4103 | |
| 4104 | for item in items { |
| 4105 | let Some((key, value)) = item.split_once('=') else { |
| 4106 | return Err(miette::miette!( |
| 4107 | "--credential-expires-at expects KEY=TIMESTAMP, got '{item}'" |
| 4108 | )); |
| 4109 | }; |
| 4110 | let key = key.trim(); |
| 4111 | if key.is_empty() { |
| 4112 | return Err(miette::miette!( |
| 4113 | "--credential-expires-at key cannot be empty" |
| 4114 | )); |
| 4115 | } |
| 4116 | let value = parse_credential_expiry_value(value, Some(key))?; |
| 4117 | map.insert(key.to_string(), value); |
| 4118 | } |
| 4119 | |
| 4120 | Ok(map) |
| 4121 | } |
| 4122 | |
| 4123 | pub async fn service_expose( |
| 4124 | server: &str, |