Rust 在为Diesel结构实现get和delete traits时,评估需求“\:std::marker::Sized”时溢出
我正在尝试一些方便的方法,以便在Rust 在为Diesel结构实现get和delete traits时,评估需求“\:std::marker::Sized”时溢出,rust,traits,rust-diesel,Rust,Traits,Rust Diesel,我正在尝试一些方便的方法,以便在banana的一个实例上调用banana.get(&conn,&pk)或banana.delete(&conn),但我无法正确获得特征边界,并且似乎不断出现递归错误: Cargo.toml [package] name = "m" version = "0.1.0" edition = "2018" [dependencies] diesel = { version = "1.4.5"
banana
的一个实例上调用banana.get(&conn,&pk)
或banana.delete(&conn)
,但我无法正确获得特征边界,并且似乎不断出现递归错误:
Cargo.toml
[package]
name = "m"
version = "0.1.0"
edition = "2018"
[dependencies]
diesel = { version = "1.4.5", features = ["postgres"] }
src/lib.rs
使用柴油机::PG连接;
使用柴油:{
关联:{HasTable,identificatable},
删除,
query_dsl::QueryDsl,
结果::QueryResult,
};
发布特征数据库模型:HasTable+identificated+QueryDsl{
fn得到(
连接:&PG连接,
主键:&::Id,
)->QueryResult{
Self::table().find(pk).first(conn)
}
fn delete(&self,conn:&PgConnection)->QueryResult{
删除(自我)。执行(连接)
}
}
生成时出错:
error[E0275]:评估需求溢出`\uU2:std::marker::size`
-->src/lib.rs:14:23
|
14 | Self::table().find(pk).first(conn)
| ^^^^
|
=帮助:考虑添加一个“γ”![recursion\u limit=“256”]`属性到您的板条箱(`m`)
=注意:由于“:”查询的“diesel::query\u dsl::filter\u dsl::FilterDsl”impl上的要求,因此需要此选项`
注释掉get
时delete
的错误:
error[E0275]:评估需求溢出`\uU2:std::marker::size`
-->src/lib.rs:18:9
|
18 |删除(自我)。执行(连接)
| ^^^^^^
|
::/home/danj/.cargo/registry/src/github.com-1ec6299db9ec823/diesel-1.4.5/src/query\u builder/functions.rs:135:18
|
135 | pub fn delete(来源:T)->delete语句{
|--------------此绑定在`diesel::query\u builder::functions::delete'中需要`
|
=帮助:考虑向你的板条(m)添加一个'y.[RealsixLimeLime=“256”]属性。
=注意:由于“:”查询的“diesel::query\u dsl::filter\u dsl::FilterDsl”impl上的要求,因此需要此选项`
=注意:由于“`&Self”的“diesel::query\u builder::update\u语句::target::IntoUpdateTarget`的impl上的要求,因此必需`
每晚使用
cargo 1.46.0进行编译(c26576f9a 2020-06-23)
您的问题似乎可以通过;的答案来回答。如果没有,请您的问题解释差异。否则,我们可以将此问题标记为已回答。您需要添加中提到的边界之一注意:由于编译器输出到y的impl of…
的要求,需要添加此边界我们的特征边界。如果发生了其他错误,只要继续添加特征边界就可以了。@weiznich,所以我一直这样做,直到我到达了私有特征边界,并且不知道如何进一步:@weiznich,基本上我已经将get
和delete
方法复制到了每个impl
中对于我的实体来说,这感觉很不干燥;代码看起来应该能够被提取到一个特征中,但这对我来说非常困难:首先,您将类似查询的“复制”称为“不干燥”,但您会将普通SQL语句中的INSERT-into
的重复称为“不干燥”吗?(如果不是,diesel dsl基本上是相同的)。除此之外,对于您可能希望在diesel::dsl
中公开的TypeDef中使用的私有类型,在这种情况下类似于diesel::dsl::Filter
。