Parses all elements of a [`ClearableValue`] as a [`Vec`] of specific types. # Legacy support This does not differentiate between [`ClearableValue::Single`] and [`ClearableValue::Array`] variants, as [PKGBUILD] files allow both notations for array values. Modern versions of [makepkg] enforce that certain values **must** be arrays. However, to be able to parse both historic and modern [PKGBUILD]
(
keyword: &Keyword,
value: &'a ClearableValue,
mut parser: P,
)
| 209 | /// |
| 210 | /// Returns an error if the elements of `value` cannot be parsed as a [`Vec`] of a specific type. |
| 211 | /// |
| 212 | /// [PKGBUILD]: https://man.archlinux.org/man/PKGBUILD.5 |
| 213 | /// [makepkg]: https://man.archlinux.org/man/makepkg.8 |
| 214 | fn parse_clearable_value_array<'a, O, P: Parser<&'a str, O, ErrMode<ContextError>>>( |
| 215 | keyword: &Keyword, |
| 216 | value: &'a ClearableValue, |
| 217 | mut parser: P, |
| 218 | ) -> Result<Override<Vec<O>>, BridgeError> { |
| 219 | let values = match value { |
| 220 | ClearableValue::Single(value) => { |
| 221 | let Some(value) = value else { |
| 222 | return Ok(Override::Clear); |
| 223 | }; |
| 224 | // An empty string is considered a clear. |
| 225 | if value.is_empty() { |
| 226 | return Ok(Override::Clear); |
| 227 | } |
| 228 | let value = parser.parse(value).map_err(|err| (keyword.clone(), err))?; |
| 229 | |
| 230 | vec![value] |
| 231 | } |
| 232 | ClearableValue::Array(values) => { |
| 233 | let Some(values) = values else { |
| 234 | return Ok(Override::Clear); |
| 235 | }; |
| 236 | |
| 237 | values |
| 238 | .iter() |
| 239 | .map(|item| parser.parse(item).map_err(|err| (keyword.clone(), err))) |
| 240 | .collect::<Result<Vec<O>, (Keyword, ParseError<&'a str, ContextError>)>>()? |
| 241 | } |
| 242 | }; |
| 243 | |
| 244 | Ok(Override::Yes { value: values }) |
| 245 | } |
no test coverage detected