Cómo almacenar Futuros de 2 funciones asincrónicas diferentes con firmas iguales en un vector.
¿Cómo almacenar Futuros de 2 funciones asíncronas diferentes con firmas iguales en un vector?
Tengo 2 funciones en diferentes cajones:
Cajón 1:
pub async fn resolve(
client: &String,
site: &String,
id: &String,
) -> Result<String, Box<dyn std::error::Error>> {
...
return Ok("".parse().unwrap());
}
Cajón 2:
pub async fn resolve(
client: &String,
site: &String,
id: &String,
) -> Result<String, Box<dyn std::error::Error>> {
...
return Ok("".parse().unwrap());
}
E intenté agregar resultados de llamadas de funciones así:
let mut futures : Vec<_> = Vec::new();
for i in 0..self.settings.count {
futures.push(
crate1::resolve(
&self.settings.filed1,
&self.settings.filed2,
&product.id,
)
);
futures.push(
crate2::resolve(
&self.settings.filed1,
&self.settings.filed2,
&product.id,
)
);
}
Pero obtuve esto:
error[E0308]: Tipos desajustados
--> src\client.rs:124:17
|
124 | / crate2::resolve(
125 | | &self.settings.filed1,
126 | | &self.settings.filed2,
127 | | &product.id,
128 | | )
| |_________________^ se esperaba un tipo opaco, se encontró un tipo opaco diferente
|
nota: al verificar el tipo de retorno del `async fn`
--> src\crate1.rs:97:6
|
97 | ) -> Result<String, Box<dyn std::error::Error>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ se comprobó la `Salida` de este `async fn`, se esperaba un tipo opaco
nota: al verificar el tipo de retorno del `async fn`
--> src\crate2.rs:17:6
|
17 | ) -> Result<String, Box<dyn std::error::Error>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ se comprobó la `Salida` de este `async fn`, se encontró un tipo opaco
= nota: se esperaba un tipo opaco `impl futures::Future` (tipo opaco en <src\crate1.rs:97:6>)
se encontró un tipo opaco `impl futures::Future` (tipo opaco en <src\crate2.rs:17:6>)
= ayuda: considere `esperar` en ambos `Future`s
= nota: usos distintos de `impl Trait` dan lugar a tipos opacos diferentes
¿Por qué Rust no puede deducir el tipo?
davy.ai
Para almacenar Futures de dos funciones asíncronas diferentes con firmas iguales en un vector, es necesario esperar en ambas Futures. Esto se debe a que diferentes usos de
impl Trait
resultan en diferentes tipos opacos, y Rust no puede deducir el tipo.