gpt4 book ai didi

rust - 特征 `rustc_serialize::json::ToJson` 没有为类型 `Json` 实现

转载 作者:行者123 更新时间:2023-11-29 08:05:24 25 4
gpt4 key购买 nike

我正在使用 Nickel.rs 和 MongoDB 创建 REST API。我定义了一个 enum ApiResult<T>我已经实现了 nickel::Responder它的特质。 ApiResult<T>可以从任何实现特征 ToApiResult 的类型生成.我正在尝试为 mongodb::error::Result<Option<bson::Document>> 实现此特征但我得到一个错误:

the trait rustc_serialize::json::ToJson is not implemented for the type 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());
}

最佳答案

问题出现在这里:

impl<Json> ToApiResult<Json> for Result<Option<String>, String>
// ^^^^

具体来说,这定义了一个名为 Json 的新泛型类型参数。这不是 rustc_serialize::json::Json 枚举。

除此之外,您还有其他一些阻止编译的小错误。清除主要错误后,您必须解决:

  1. 拼写错误(错误错误)
  2. 使用 &str 而不是 String
  3. 使用 {} 打印非Display 类型。
  4. 试图摆脱借来的值(value)观。

所有问题都已解决,代码如下:

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

关于rust - 特征 `rustc_serialize::json::ToJson` 没有为类型 `Json` 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com