remove the two remaining as_str-style wrappers (DeliveryKind::parse, Wanted::parse)

This commit is contained in:
damocles 2026-09-11 22:08:03 +02:00
commit 7773f10646
2 changed files with 11 additions and 26 deletions

View file

@ -218,17 +218,6 @@ impl DeliveryKind {
<&str>::from(self)
)
}
/// Parse the `{kind}` path segment. Unknown values are rejected rather
/// than accepted-and-ignored: a typo in a registered `target_url` must
/// be *observable*, and a 200 for an unrecognised path is exactly the
/// silence this issue exists to remove. Derived (`strum::EnumString`,
/// the same per-variant `#[strum(serialize = "...")]` spellings
/// `as_str` uses) rather than a hand-written match kept in sync with
/// that one by hand.
fn parse(segment: &str) -> Option<Self> {
segment.parse().ok()
}
}
/// Why a delivery was refused.
@ -359,7 +348,10 @@ pub(super) async fn post_webhook_forge(
return (refusal.status(), message).into_response();
}
let Some(kind) = DeliveryKind::parse(&kind) else {
// Unknown values are rejected rather than accepted-and-ignored: a typo in
// a registered `target_url` must be *observable*, and a 200 for an
// unrecognised path is exactly the silence this issue exists to remove.
let Some(kind) = kind.parse::<DeliveryKind>().ok() else {
tracing::warn!(%kind, "webhook: delivery on an unknown hook kind");
return (StatusCode::NOT_FOUND, "unknown hook kind").into_response();
};
@ -547,20 +539,20 @@ mod tests {
#[test]
fn only_the_registered_hook_kinds_parse() {
assert_eq!(
DeliveryKind::parse("knowledge"),
"knowledge".parse::<DeliveryKind>().ok(),
Some(DeliveryKind::Knowledge)
);
assert_eq!(
DeliveryKind::parse("config-pr"),
"config-pr".parse::<DeliveryKind>().ok(),
Some(DeliveryKind::ConfigPr)
);
assert_eq!(
DeliveryKind::parse("config_pr"),
"config_pr".parse::<DeliveryKind>().ok(),
None,
"underscore is not the registered spelling; accepting both would make a journal line ambiguous"
);
assert_eq!(DeliveryKind::parse(""), None);
assert_eq!(DeliveryKind::parse("../knowledge"), None);
assert_eq!("".parse::<DeliveryKind>().ok(), None);
assert_eq!("../knowledge".parse::<DeliveryKind>().ok(), None);
}
/// A malformed stored secret is replaced rather than fatal — and the
@ -635,7 +627,7 @@ mod tests {
let url = kind.target_url("https://swarm.example");
let segment = url.rsplit('/').next().expect("a last segment");
assert_eq!(
DeliveryKind::parse(segment),
segment.parse::<DeliveryKind>().ok(),
Some(kind),
"the last path segment of a registered URL must parse back \
to the kind that built it"