java反序列化 网规_对于实现特定特性的所有类型,我如何大规模实现反序列化?...
我正在用serde反序列化yaml配置文件。对于我反序列化到的大多数结构,事情都很简单,结构的字段和我的yaml文件中的属性之间有一对一的关系。
在一些情况下,事情会更复杂一些。对于这些,可以更好地将yaml文件中的属性视为构造函数的参数。实际结构将具有不同的字段,根据这些字段进行计算。
对于这些情况,我编写了单独的配置结构,并将其反序列化为。为了简单起见,考虑下面这个愚蠢的例子:
struct Message {
text: String,
}
impl Message {
fn from_config(config: MessageConfig) -> Message {
Message {
text: format!("{} {}", config.first_half, config.second_half),
}
}
}
#[derive(Deserialize)]
struct MessageConfig {
first_half: String,
second_half: String,
}
让塞尔德从
MessageConfig
到
Message
对我来说,我实现了
Deserialize
对于
消息
:
impl Deserialize for Message {
fn deserialize(deserializer: D) -> Result
where
D: Deserializer,
{
MessageConfig::deserialize(deserializer).map(|config| Message::from_config(config))
}
}
这是可行的,但是如果我要为每个结构执行此操作,将涉及大量反序列化代码的复制粘贴,因此我认为应该利用它来创建一个特性:
use serde::{Deserialize, Deserializer};
use serde_json;
#[macro_use]
extern crate serde_derive;
trait Configurable {
type Config;
fn from_config(config: Self::Config) -> Self;
}
impl Deserialize for T
where
T: Configurable,
C: Deserialize,
{
fn deserialize(deserializer: D) -> Result
where
D: Deserializer,
{
Self::Config::deserialize(deserializer).map(|config| Self::from_config(config))
}
}
struct Message {
text: String,
}
impl Configurable for Message {
type Config = MessageConfig;
fn from_config(config: MessageConfig) -> Message {
Message {
text: format!("{} {}", config.first_half, config.second_half),
}
}
}
#[derive(Deserialize)]
struct MessageConfig {
first_half: String,
second_half: String,
}
但是,编译器对此并不满意:
error[E0119]: conflicting implementations of trait `_IMPL_DESERIALIZE_FOR_MessageConfig::_serde::Deserialize` for type `std::boxed::Box<_>`:
--> src/lib.rs:11:1
|
11 | / impl Deserialize for T
12 | | where
13 | | T: Configurable,
14 | | C: Deserialize,
... |
21 | | }
22 | | }
| |_^
|
= note: conflicting implementation in crate `serde`:
- impl _IMPL_DESERIALIZE_FOR_MessageConfig::_serde::Deserialize for std::boxed::Box
where T: _IMPL_DESERIALIZE_FOR_MessageConfig::_serde::Deserialize;
= note: downstream crates may implement trait `Configurable` for type `std::boxed::Box<_>`
error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g. `MyStruct`)
--> src/lib.rs:11:1
|
11 | / impl Deserialize for T
12 | | where
13 | | T: Configurable,
14 | | C: Deserialize,
... |
21 | | }
22 | | }
| |_^ type parameter `T` must be used as the type parameter for some local type
|
= note: only traits defined in the current crate can be implemented for a type parameter
这些错误信息对我来说毫无意义。什么?
Box
有什么关系吗?有没有可能让这种特质发挥作用?
java反序列化 网规_对于实现特定特性的所有类型,我如何大规模实现反序列化?...相关推荐
- java 开源网盘_现在的开源网盘还有哪些推荐?
在此推荐一个用Java编写的.简洁完善的开源云盘系统:kiftd 这是一个主要面向家庭.团队.小型组织的网盘搭建系统,开源免费(源代码在GitHub上),体积不大(不超过200MB),安装和使用非常简 ...
- java旅游网项目_基于jsp的旅游网-JavaEE实现旅游网 - java项目源码
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的旅游网, 该项目可用各类java课程设计大作业中, 旅游网的系统架构分为前后台两部分, 最终实现在线上进行旅游网各 ...
- java 知网爬虫_怎样抓取中国知网数据
2,快捷采集的使用方法:如何使用快捷采集 在中国知网通过高级检索,输入关键词后抓取相关文章的标题.作者.摘要.关键词等信息.但是中国知网在输入关键词搜索后网址并不会发生变化,所以在抓取的时候我们需要爬 ...
- 情怀java手机网游_经典端游移植手游 “情怀”赋予老IP全新活力
原标题:经典端游移植手游 "情怀"赋予老IP全新活力 腾讯旗下<天涯明月刀>手游在近日开始了封测,这款经典的国产网游也正式加入了手游的大家庭中,事实上很多知名的网络游戏 ...
- java 断网处理_如何处理浏览器的断网情况?
好的断网处理会让人很舒适:lol的断线重连,王者荣耀的断线重连 可以确保游戏的继续进行 坏的断网处理甚至不处理会出bug:比如我手上的项目就出了个bug 业务人员表示非常苦恼 网络问题一直是一个很值得 ...
- 博学谷java百度网盘_博学谷javaee就业班2020百度云
线程在面试中已经是常客了,也是我们必备的知识点,关于线程,问的最多的便是线程是什么?为什么使用多线程?多线程的示例以及解决方案?线程池是什么? 一.线程是什么? Thread类中有这样的明确定义:线程 ...
- java 断网处理_博客大巴劫后重生:断网10日后恢复访问(图)
重新上线的博客大巴首页 博客大巴昨日发表公告 1月14日上午消息,在断网长达十天之后,博客大巴(http://www.blogbus.com/)昨晚终于恢复访问.此前多日,与博客大巴一起出现访问故障的 ...
- java正则表达式不包含-_不包含特定字符串的Java正则表达式。
示例import java.util.regex.*; class PatternMatch{ public static void main(String args[]) { String cont ...
- 博学谷java百度网盘_博学谷javaee在线就业班2020网盘
一:为什么要学多线程 应付面试 :多线程几乎是面试中必问的题,所以掌握一定的基础知识是必须的. 了解并发编程:实际工作中很少写多线程的代码,这部分代码一般都被人封装起来了,在业务中使用多线程的机会也不 ...
最新文章
- 关于--Error: User Command terminated, Exit-Code = 1解决办法
- 写一个ajax框架,自己写的一个ajax框架,希望大家多提意见
- 【Ubuntu入门到精通系列讲解】远程管理常用命令速查
- windows 技巧篇-查看文件夹被那个进程占用,文件夹占用解除方法
- python编译安装pyaudio
- 105.敏捷开发模型
- 只需20小时,让0基础的你掌握小程序云开发!这个暑假,约否?
- AngularJS与Angular的区别
- MySQL乱码问题如何排查
- LeetCode-1052:爱生气的书店老板
- cmd无法运行python_通过Java-%1在cmd中运行python文件不是有效的Win32应用程序 - java...
- 新思路计算机一级百度云,新思路全国计算机一级考试选择题(含解析和答案)合并(1)...
- NLP简报(Issue #3)
- 【学术杂谈】博士毕业都去哪儿了,谈谈学术的这条路该如何走
- 74ls175四人抢答器电路图_用数字电路实现四人抢答器
- 易基因 | 表观技术:单细胞及微量细胞全基因组重亚硫酸盐甲基化测序(scWGBS)
- NoSQLBooster for MongoDB基本使用步骤
- 逻辑上的“谬误”真的是我们应该所认为的错误吗?
- Qt主线程和工作线程更新界面问题
- 淘宝API:item_get_app - 获得淘宝app商品详情原数据
热门文章
- html网页原理,html运行原理
- 文档如何清除html,html清除浏览器缓存.docx
- 服务器引导顺序,docker compose 服务启动顺序控制的方法
- php中update语句修改多个字段,Myabtis中批量更新update多字段
- python训练手势分类器_使用Pytorch训练分类器详解(附python演练)
- 20220202--CTF刷题MISC方向--第5题--反编译
- 国外基于android的系统,基于Android的位置服务系统设计与实现
- eggjs的参数校验模块egg-validate的使用和进一步定制化升级
- 微信小程序 获取用户信息并保存登录状态
- The podfile