use async_graphql::ErrorExtensions; use crate::Error; fn code_for(err: &Error) -> &'static str { match err { Error::NotExist(_) => "NOT_EXIST", Error::BranchNotExist(_) => "BRANCH_NOT_EXIST", Error::TagNotExist(_) => "TAG_NOT_EXIST", Error::NotFound { .. } => "NOT_FOUND", Error::InvalidRefName(_) => "INVALID_REF_NAME", Error::InvalidRevSpec(_) => "INVALID_REV_SPEC", Error::Open(_) => "REPO_OPEN_ERROR", Error::Odb(_) => "ODB_ERROR", Error::Find(_) => "FIND_ERROR", Error::Ref(_) => "REF_ERROR", Error::RevParse(_) => "REV_PARSE_ERROR", Error::Serde(_) => "SERDE_ERROR", Error::Io(_) => "IO_ERROR", Error::Lfs(_) => "LFS_ERROR", Error::Other(_) => "INTERNAL_ERROR", } } impl ErrorExtensions for Error { fn extend(&self) -> async_graphql::Error { let code = code_for(self); async_graphql::Error::new(self.to_string()).extend_with(|_, e| { e.set("code", code); }) } }