From 71f9b1945b7bb04368598db082f33776fdd2237a Mon Sep 17 00:00:00 2001 From: "kacaii.dev" Date: Sat, 11 Jul 2026 11:19:12 -0300 Subject: [PATCH] possum/at_uri: pattern match on string before parsing --- src/possum/at_uri.gleam | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/possum/at_uri.gleam b/src/possum/at_uri.gleam index 5422c5b..ba5f123 100644 --- a/src/possum/at_uri.gleam +++ b/src/possum/at_uri.gleam @@ -12,8 +12,10 @@ import possum/handle pub type ParseError { /// Only "at://" is supported InvalidScheme(value: String) - /// Authority is neither a valid DID or Handle - InvalidAuthority(value: String) + /// Authority not a valid Handle + InvalidHandleAuthority(reason: handle.ParseError) + /// Authority not a valid DID + InvalidDidAuthority(reason: did.ParseError) } pub type Authority { @@ -109,14 +111,18 @@ pub fn parse(content: String) -> Result(AtUri, ParseError) { } fn parse_authority(string: String) -> Result(Authority, ParseError) { - use _ <- result.try_recover(case did.parse(string) { - Ok(value) -> Ok(Did(value)) - Error(_) -> Error(InvalidAuthority(string)) - }) + case string { + "did:" <> _rest -> + case did.parse(string) { + Ok(value) -> Ok(Did(value)) + Error(reason) -> Error(InvalidDidAuthority(reason:)) + } - case handle.parse(string) { - Ok(value) -> Ok(Handle(value)) - Error(_) -> Error(InvalidAuthority(string)) + _handle -> + case handle.parse(string) { + Ok(value) -> Ok(Handle(value)) + Error(reason) -> Error(InvalidHandleAuthority(reason:)) + } } } -- 2.51.2