具有块级生存期的类型参数

时间:2018-11-18 13:25:18

标签: rust generic-type-argument

我想为泛型类型参数提供功能。但是,在这种情况下,它们需要特定的生存期(由于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))
}

我希望对此有一种解决方法。

0 个答案:

没有答案