1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2024 Google LLC 2*cf78ab8cSAndroid Build Coastguard Worker // 3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*cf78ab8cSAndroid Build Coastguard Worker // 7*cf78ab8cSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0 8*cf78ab8cSAndroid Build Coastguard Worker // 9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License. 14*cf78ab8cSAndroid Build Coastguard Worker 15*cf78ab8cSAndroid Build Coastguard Worker //! This module defines the Proxy error types. 16*cf78ab8cSAndroid Build Coastguard Worker 17*cf78ab8cSAndroid Build Coastguard Worker use std::fmt; 18*cf78ab8cSAndroid Build Coastguard Worker use std::io; 19*cf78ab8cSAndroid Build Coastguard Worker use std::net::SocketAddr; 20*cf78ab8cSAndroid Build Coastguard Worker 21*cf78ab8cSAndroid Build Coastguard Worker /// An enumeration of possible errors. 22*cf78ab8cSAndroid Build Coastguard Worker #[derive(Debug)] 23*cf78ab8cSAndroid Build Coastguard Worker pub enum Error { 24*cf78ab8cSAndroid Build Coastguard Worker IoError(io::Error), 25*cf78ab8cSAndroid Build Coastguard Worker ConnectionError(SocketAddr, String), 26*cf78ab8cSAndroid Build Coastguard Worker MalformedConfigString, 27*cf78ab8cSAndroid Build Coastguard Worker InvalidPortNumber, 28*cf78ab8cSAndroid Build Coastguard Worker InvalidHost, 29*cf78ab8cSAndroid Build Coastguard Worker } 30*cf78ab8cSAndroid Build Coastguard Worker 31*cf78ab8cSAndroid Build Coastguard Worker impl fmt::Display for Error { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result32*cf78ab8cSAndroid Build Coastguard Worker fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 33*cf78ab8cSAndroid Build Coastguard Worker write!(f, "ProxyError: {self:?}") 34*cf78ab8cSAndroid Build Coastguard Worker } 35*cf78ab8cSAndroid Build Coastguard Worker } 36*cf78ab8cSAndroid Build Coastguard Worker 37*cf78ab8cSAndroid Build Coastguard Worker impl std::error::Error for Error {} 38*cf78ab8cSAndroid Build Coastguard Worker 39*cf78ab8cSAndroid Build Coastguard Worker impl From<io::Error> for Error { from(err: io::Error) -> Self40*cf78ab8cSAndroid Build Coastguard Worker fn from(err: io::Error) -> Self { 41*cf78ab8cSAndroid Build Coastguard Worker Error::IoError(err) 42*cf78ab8cSAndroid Build Coastguard Worker } 43*cf78ab8cSAndroid Build Coastguard Worker } 44*cf78ab8cSAndroid Build Coastguard Worker 45*cf78ab8cSAndroid Build Coastguard Worker #[cfg(test)] 46*cf78ab8cSAndroid Build Coastguard Worker mod tests { 47*cf78ab8cSAndroid Build Coastguard Worker use super::*; 48*cf78ab8cSAndroid Build Coastguard Worker 49*cf78ab8cSAndroid Build Coastguard Worker #[test] test_io_error_chaining()50*cf78ab8cSAndroid Build Coastguard Worker fn test_io_error_chaining() { 51*cf78ab8cSAndroid Build Coastguard Worker let inner_error = std::io::Error::new(std::io::ErrorKind::NotFound, "file not found"); 52*cf78ab8cSAndroid Build Coastguard Worker let outer_error = Error::IoError(inner_error); 53*cf78ab8cSAndroid Build Coastguard Worker 54*cf78ab8cSAndroid Build Coastguard Worker assert!(outer_error.to_string().contains("file not found")); 55*cf78ab8cSAndroid Build Coastguard Worker } 56*cf78ab8cSAndroid Build Coastguard Worker } 57