使用Diesel操作PostgreSQL时,IpNetwork类型因未实现diesel::Expression trait导致编译错误的解决求助
Diesel操作PostgreSQL时,IpNetwork类型因未实现diesel::Expression trait导致编译错误的解决求助
大家好,我在使用Diesel框架配合PostgreSQL开发时遇到了一个类型适配的编译错误,折腾了半天没找到解决办法,想请教下社区的朋友们该怎么处理。
先跟大家梳理下我的操作流程和相关代码:
1. 创建PostgreSQL数据表
我在PostgreSQL中创建了一张net_test表,结构如下:
CREATE TABLE public.net_test ( net inet NOT NULL, id int8 NOT NULL, CONSTRAINT net_pk PRIMARY KEY (id) );
2. 定义Diesel数据模型
参考Diesel文档的指引,我选用ipnetwork库的IpNetwork类型来对应数据库的inet字段,模型代码如下:
use std::fmt::Display; use serde::Serialize; use serde::Deserialize; use crate::model::diesel::dolphin::dolphin_schema::*; use bigdecimal::BigDecimal; use chrono::DateTime; use chrono::offset::Utc; use ipnetwork::IpNetwork; #[derive(Insertable,Queryable,QueryableByName,Debug,Serialize,Deserialize,Default,Clone)] #[diesel(table_name = net_test)] pub struct NetTest { pub net: IpNetwork, pub id: i64, }
3. Schema文件配置
对应的Diesel schema文件内容:
table! { net_test (id) { net -> Inet, id -> Int8, } }
4. 编译时的错误信息
当我编译项目时,控制台抛出了如下错误:
the trait `diesel::Expression` is not implemented for `IpNetwork`, which is required by `&'insert IpNetwork: AsExpression<diesel::sql_types::Inet>`
5. Diesel依赖配置
我的Cargo.toml中Diesel的依赖配置如下:
diesel = { version = "2.2.1", features = [ "postgres", "64-column-tables", "chrono", "serde_json", "numeric", "ipnet-address" ] }
我本来以为启用ipnet-address特性就能让IpNetwork和Diesel的Inet类型自动适配,但显然还缺少必要的实现。有没有朋友知道该怎么解决这个编译错误呀?
备注:内容来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

