blob: 86c8b75305593c0b95654be183b69f5e42566324 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use std::error;
use std::fmt;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum ParseError {
InvalidScheme,
InvalidHost,
InvalidName,
InvalidVariant,
InvalidHash,
InvalidResourcePath,
ExtraPathSegments,
CannotContainPort,
CannotContainUsername,
CannotContainPassword,
CannotContainQueryParameters,
UrlParseError(url::ParseError),
}
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
ParseError::InvalidScheme => write!(f, "invalid scheme"),
ParseError::InvalidHost => write!(f, "invalid host"),
ParseError::InvalidName => write!(f, "invalid name"),
ParseError::InvalidVariant => write!(f, "invalid variant"),
ParseError::InvalidHash => write!(f, "invalid hash"),
ParseError::InvalidResourcePath => write!(f, "invalid resource path"),
ParseError::ExtraPathSegments => write!(f, "extra path segments"),
ParseError::CannotContainPort => write!(f, "cannot contain port"),
ParseError::CannotContainUsername => write!(f, "cannot contain username"),
ParseError::CannotContainPassword => write!(f, "cannot contain password"),
ParseError::CannotContainQueryParameters => write!(f, "cannot contain query parameters"),
ParseError::UrlParseError(err) => err.fmt(f),
}
}
}
impl error::Error for ParseError {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
match *self {
ParseError::InvalidScheme => None,
ParseError::InvalidHost => None,
ParseError::InvalidName => None,
ParseError::InvalidVariant => None,
ParseError::InvalidHash => None,
ParseError::InvalidResourcePath => None,
ParseError::ExtraPathSegments => None,
ParseError::CannotContainPort => None,
ParseError::CannotContainUsername => None,
ParseError::CannotContainPassword => None,
ParseError::CannotContainQueryParameters => None,
ParseError::UrlParseError(ref err) => err.source(),
}
}
}
impl From<url::ParseError> for ParseError {
fn from(err: url::ParseError) -> Self {
ParseError::UrlParseError(err)
}
}