diff --git a/misc/multiaddr/src/errors.rs b/misc/multiaddr/src/errors.rs index 2636358319e..964cdffff50 100644 --- a/misc/multiaddr/src/errors.rs +++ b/misc/multiaddr/src/errors.rs @@ -14,7 +14,7 @@ pub enum Error { InvalidUvar(decode::Error), ParsingError(Box), UnknownProtocolId(u32), - UnknownProtocolString, + UnknownProtocolString(String), #[doc(hidden)] __Nonexhaustive } @@ -28,7 +28,7 @@ impl fmt::Display for Error { Error::InvalidUvar(e) => write!(f, "failed to decode unsigned varint: {}", e), Error::ParsingError(e) => write!(f, "failed to parse: {}", e), Error::UnknownProtocolId(id) => write!(f, "unknown protocol id: {}", id), - Error::UnknownProtocolString => f.write_str("unknown protocol string"), + Error::UnknownProtocolString(string) => write!(f, "unknown protocol string: {}", string), Error::__Nonexhaustive => f.write_str("__Nonexhaustive") } } diff --git a/misc/multiaddr/src/protocol.rs b/misc/multiaddr/src/protocol.rs index 2b687b126e9..e424a5c746c 100644 --- a/misc/multiaddr/src/protocol.rs +++ b/misc/multiaddr/src/protocol.rs @@ -171,7 +171,7 @@ impl<'a> Protocol<'a> { let s = iter.next().ok_or(Error::InvalidProtocolString)?; Ok(Protocol::Memory(s.parse()?)) } - _ => Err(Error::UnknownProtocolString) + unknown => Err(Error::UnknownProtocolString(unknown.to_string())) } } diff --git a/misc/multiaddr/tests/lib.rs b/misc/multiaddr/tests/lib.rs index 0516a682629..d31e45cd953 100644 --- a/misc/multiaddr/tests/lib.rs +++ b/misc/multiaddr/tests/lib.rs @@ -328,3 +328,15 @@ fn replace_ip4_with_ip6() { assert_eq!(result.unwrap(), "/ip6/2001:db8::1/tcp/10000".parse::().unwrap()) } +#[test] +fn unknown_protocol_string() { + match "/unknown/1.2.3.4".parse::() { + Ok(_) => assert!(false, "The UnknownProtocolString error should be caused"), + Err(e) => match e { + crate::Error::UnknownProtocolString(protocol) => { + assert_eq!(protocol, "unknown") + }, + _ => assert!(false, "The UnknownProtocolString error should be caused") + } + } +}