对于类型`json',没有实现特性`rustc_serialize::json::ToJson``
我正在使用Nickel.rs和MongoDB创建RESTAPI。我定义了一个对于类型`json',没有实现特性`rustc_serialize::json::ToJson``,rust,Rust,我正在使用Nickel.rs和MongoDB创建RESTAPI。我定义了一个enumapiresult,并为它实现了nicle::Responder特性ApiResult可以从实现traitToApiResult的任何类型生成。我试图为mongodb::error::Result实现这个特性,但我得到一个错误: traitrustc_serialize::json::ToJson没有为 键入Json 我查看了文档,可以看到ToJson已经为Json实现了: impl ToJson for Jso
enumapiresult
,并为它实现了nicle::Responder
特性ApiResult
可以从实现traitToApiResult
的任何类型生成。我试图为mongodb::error::Result
实现这个特性,但我得到一个错误:
traitrustc_serialize::json::ToJson
没有为
键入Json
我查看了文档,可以看到ToJson
已经为Json
实现了:
impl ToJson for Json {
fn to_json(&self) -> Json { self.clone() }
}
那么是什么导致了错误呢?以下是一个MCVE,再现了该问题:
// rustc_serialize
extern crate rustc_serialize;
use rustc_serialize::json::{self,Json, ToJson};
use std::{result,error};
enum ApiResult<T : Sized + ToJson>{
Ok(T),
Err(T)
}
trait ToApiResult<T: Sized + ToJson>{
fn to_api_result(&self)->ApiResult<T>;
}
impl<Json> ToApiResult<Json> for Result<Option<String>,String> {
fn to_api_result(&self)->ApiResult<Json>{
match *self {
Ok(Some(text))=>{
ApiResult::Ok(text.to_json())
},
Ok(None)=>{
ApiResult::Error(().to_json())
},
Err(e)=>{
ApiResult::Error(e.to_json())
}
}
}
}
fn main(){
let r = Result::Ok(Some("hello"));
print!("{}",r.to_api_result());
}
//rustc\u序列化
外部板条箱锈迹丛生;
使用rustc_serialize::json::{self,json,ToJson};
使用std::{result,error};
枚举结果{
Ok(T),
错误(T)
}
性状对结果的影响{
fn to_api_result(&self)->apireult;
}
对结果进行impl-to-piresult{
fn to_api_result(&self)->ApiResult{
匹配自我{
好的(一些(文本))=>{
ApiResult::Ok(text.to_json())
},
正常(无)=>{
ApiResult::错误(().to_json())
},
错误(e)=>{
ApiResult::错误(例如,to_json())
}
}
}
}
fn main(){
让r=Result::Ok(Some(“hello”);
打印!(“{}”,r.to_api_result());
}
问题出现在这里:
impl<Json> ToApiResult<Json> for Result<Option<String>, String>
// ^^^^
当然,我会马上去做的,我不敢相信这是一件如此琐碎的事情。感谢您指出它+修复其他错误。编译器还没有结束,所以我没有注意它们!
extern crate rustc_serialize;
use rustc_serialize::json::{Json, ToJson};
#[derive(Debug)]
enum ApiResult<T: Sized + ToJson> {
Ok(T),
Err(T),
}
trait ToApiResult<T: Sized + ToJson> {
fn to_api_result(&self) -> ApiResult<T>;
}
impl ToApiResult<Json> for Result<Option<String>, String> {
fn to_api_result(&self) -> ApiResult<Json> {
match *self {
Ok(Some(ref text)) => ApiResult::Ok(text.to_json()),
Ok(None) => ApiResult::Err(().to_json()),
Err(ref e) => ApiResult::Err(e.to_json()),
}
}
}
fn main(){
let r = Result::Ok(Some("hello".to_string()));
print!("{:?}", r.to_api_result());
}