error.rs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. use thiserror::Error as ThisError;
  2. pub type Result<T, E = Error> = std::result::Result<T, E>;
  3. #[derive(ThisError, Debug)]
  4. pub enum Error {
  5. /// Used when errors need to propogate but are too unique to be typed
  6. #[error("{0}")]
  7. Unique(String),
  8. #[error("I/O Error: {0}")]
  9. IO(#[from] std::io::Error),
  10. #[error("Format Error: {0}")]
  11. FormatError(#[from] std::fmt::Error),
  12. #[error("Format failed: {0}")]
  13. ParseError(String),
  14. #[error("Runtime Error: {0}")]
  15. RuntimeError(String),
  16. #[error("Failed to write error")]
  17. FailedToWrite,
  18. #[error("Build Failed: {0}")]
  19. BuildFailed(String),
  20. #[error("Cargo Error: {0}")]
  21. CargoError(String),
  22. #[error("Couldn't retrieve cargo metadata")]
  23. CargoMetadata(#[source] cargo_metadata::Error),
  24. #[error("{0}")]
  25. CustomError(String),
  26. #[error("Invalid proxy URL: {0}")]
  27. InvalidProxy(#[from] hyper::http::uri::InvalidUri),
  28. #[error("Failed to establish proxy: {0}")]
  29. ProxySetupError(String),
  30. #[error("Error proxying request: {0}")]
  31. ProxyRequestError(hyper::Error),
  32. #[error(transparent)]
  33. Other(#[from] anyhow::Error),
  34. }
  35. impl From<&str> for Error {
  36. fn from(s: &str) -> Self {
  37. Error::Unique(s.to_string())
  38. }
  39. }
  40. impl From<String> for Error {
  41. fn from(s: String) -> Self {
  42. Error::Unique(s)
  43. }
  44. }
  45. impl From<html_parser::Error> for Error {
  46. fn from(e: html_parser::Error) -> Self {
  47. Self::ParseError(e.to_string())
  48. }
  49. }
  50. impl From<hyper::Error> for Error {
  51. fn from(e: hyper::Error) -> Self {
  52. Self::RuntimeError(e.to_string())
  53. }
  54. }
  55. #[macro_export]
  56. macro_rules! custom_error {
  57. ($msg:literal $(,)?) => {
  58. Err(Error::CustomError(format!($msg)))
  59. };
  60. ($err:expr $(,)?) => {
  61. Err(Error::from($err))
  62. };
  63. ($fmt:expr, $($arg:tt)*) => {
  64. Err(Error::CustomError(format!($fmt, $($arg)*)))
  65. };
  66. }