我想为泛型类型参数提供功能。但是,在这种情况下,它们需要特定的生存期(由于serde::de::Deserialize<'de>
)。
类型实参将传递给函数run
中的函数myfunction
。
参数&data
仅在Ok(data)
块的生命周期内有效,这与'b
的泛型类型参数的生命周期myfunction
冲突。
如果提供了具体类型,则可以立即使用,但是由于泛型类型会影响生命周期,因此我不确定如何解决。
有没有一种方法可以指定Ok(data)
块的生存期,或者提供类型参数的另一种方法?否则,对于每种我需要的类型组合,我都必须有一个myfunction
变体,这是可能的,但不是最优的或优雅的。
我已将使该示例运行在rust playground上的函数放在代码中。
//the function in question
fn myfunction<'b, T1, T2>(req: &'b [u8]) -> Result<(), ()>
where
T2: TaskResult<'b>,
T1: TaskInfo<'b, T2>,
{
match extract_body(req) {
Ok(data) => {
// if concrete types are supplied, it works.
//let t = run::<Test1, Test2>(&data);
// as the generic types are bound to the lifetime 'b,
// which is longer than data would live
let t = run::<T1, T2>(&data);
//do something with t
Ok(())
}
Err(_) => panic!("error"),
}
}
//can't be changed, as it is an abbreviated function of a crate I'm using.
fn extract_body(req: &[u8]) -> Result<bytes::Bytes, ()> {
Ok(bytes::Bytes::from(req))
}
我希望对此有一种解决方法。