对于类型`json',没有实现特性`rustc_serialize::json::ToJson``

对于类型`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

我正在使用Nickel.rs和MongoDB创建RESTAPI。我定义了一个
enumapiresult
,并为它实现了
nicle::Responder
特性
ApiResult
可以从实现trait
ToApiResult
的任何类型生成。我试图为
mongodb::error::Result
实现这个特性,但我得到一个错误:

trait
rustc_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());
}