|  | @@ -0,0 +1,43 @@
 | 
	
		
			
				|  |  | +// Copyright (c) 2018, The Tor Project, Inc.
 | 
	
		
			
				|  |  | +// Copyright (c) 2018, isis agora lovecruft
 | 
	
		
			
				|  |  | +// See LICENSE for licensing information
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//! Various errors which may occur during protocol version parsing.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +use std::fmt;
 | 
	
		
			
				|  |  | +use std::fmt::Display;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/// All errors which may occur during protover parsing routines.
 | 
	
		
			
				|  |  | +#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
 | 
	
		
			
				|  |  | +#[allow(missing_docs)] // See Display impl for error descriptions
 | 
	
		
			
				|  |  | +pub enum ProtoverError {
 | 
	
		
			
				|  |  | +    Overlap,
 | 
	
		
			
				|  |  | +    LowGreaterThanHigh,
 | 
	
		
			
				|  |  | +    Unparseable,
 | 
	
		
			
				|  |  | +    ExceedsMax,
 | 
	
		
			
				|  |  | +    ExceedsExpansionLimit,
 | 
	
		
			
				|  |  | +    UnknownProtocol,
 | 
	
		
			
				|  |  | +    ExceedsNameLimit,
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/// Descriptive error messages for `ProtoverError` variants.
 | 
	
		
			
				|  |  | +impl Display for ProtoverError {
 | 
	
		
			
				|  |  | +    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
 | 
	
		
			
				|  |  | +        match *self {
 | 
	
		
			
				|  |  | +            ProtoverError::Overlap
 | 
	
		
			
				|  |  | +                => write!(f, "Two or more (low, high) protover ranges would overlap once expanded."),
 | 
	
		
			
				|  |  | +            ProtoverError::LowGreaterThanHigh
 | 
	
		
			
				|  |  | +                => write!(f, "The low in a (low, high) protover range was greater than high."),
 | 
	
		
			
				|  |  | +            ProtoverError::Unparseable
 | 
	
		
			
				|  |  | +                => write!(f, "The protover string was unparseable."),
 | 
	
		
			
				|  |  | +            ProtoverError::ExceedsMax
 | 
	
		
			
				|  |  | +                => write!(f, "The high in a (low, high) protover range exceeds u32::MAX."),
 | 
	
		
			
				|  |  | +            ProtoverError::ExceedsExpansionLimit
 | 
	
		
			
				|  |  | +                => write!(f, "The protover string would exceed the maximum expansion limit."),
 | 
	
		
			
				|  |  | +            ProtoverError::UnknownProtocol
 | 
	
		
			
				|  |  | +                => write!(f, "A protocol in the protover string we attempted to parse is unknown."),
 | 
	
		
			
				|  |  | +            ProtoverError::ExceedsNameLimit
 | 
	
		
			
				|  |  | +                => write!(f, "An unrecognised protocol name was too long."),
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |