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:)) + } } }