Rust Matrix服务器编译报错:error[E0599] map_err方法未找到
问题解决:
self.map_err未定义编译错误 错误原因
在ResultExt trait的unknown方法中,编译器无法识别self.map_err——因为trait定义时没有对Self类型做约束,编译器不知道Self具备map_err方法。尽管你后续为Result<T,E>实现了该trait,但trait本身的定义没有明确Self需要支持这个方法。
解决方案
修改ResultExt trait的定义,添加std::ops::Try<Ok = T>作为超trait,确保Self类型(这里是Result<T,E>)具备map_err方法:
pub trait ResultExt<T>: Sized + std::ops::Try<Ok = T> { fn with_codes(self, status: StatusCode, code: ErrorCode) -> Result<T, MatrixError>; fn unknown(self) -> Result<T, MatrixError> { #[cfg(debug_assertions)] // don't leak ISE info in release mode let res = self.with_codes(StatusCode::INTERNAL_SERVER_ERROR, ErrorCode::UNKNOWN); #[cfg(not(debug_assertions))] let res = self.map_err(|_| MatrixError::internal_err()); res } }
如果你不想依赖Try trait,也可以复用trait内的with_codes方法,通过覆盖错误信息实现release模式的隐藏效果:
fn unknown(self) -> Result<T, MatrixError> { #[cfg(debug_assertions)] let res = self.with_codes(StatusCode::INTERNAL_SERVER_ERROR, ErrorCode::UNKNOWN); #[cfg(not(debug_assertions))] let res = self.with_codes(StatusCode::INTERNAL_SERVER_ERROR, ErrorCode::UNKNOWN) .map_err(|_| MatrixError::internal_err()); res }
额外注意
确保代码中已正确定义或导入ErrorCode类型,否则会触发新的编译错误。
内容的提问来源于stack exchange,提问作者DanLP6
相关产品推荐
相关产品推荐

