MCPcopy Create free account
hub / github.com/archlinux/alpm / parse_clearable_value_array

Function parse_clearable_value_array

alpm-srcinfo/src/pkgbuild_bridge/package.rs:211–242  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

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
214fn 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}

Callers 1

handle_packageFunction · 0.85

Calls 2

parseMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected