Intentando encerrar en una caja a un escritor dinámico para transmitirlo a través de FFI sin éxito en RUST.
Parece que tengo un problema básico que no puedo resolver.
Tengo esta estructura que espera que se le pase un escritor dinámico anclado (“apinned dynamic writer”) para pasarlo a “C” y luego lo recibe de nuevo como parte de una función de devolución de llamada:
Aquí está la estructura:
pub struct ExecutionContext<'a> {
pub log: Pin<&'a mut Box<dyn std::io::write="">>,
}
Sin embargo, no puedo encontrar una forma de pasar un simple “stderr” a esta estructura.
Si intento:
let mut stderr2 = Pin::new(&mut Box::<dyn write="">::new(stderr()));
Obtengo este error:
no se puede llamar a la función o elemento asociado sobre `Box<dyn std::io::write="">` debido a restricciones no satisfechas de los rasgos
Cuando intento esto:
let mut stderr2 = Pin::new(&mut Box::new(stderr()));
let mut ctx = ExecutionContext {
log: stderr2,
};
Obtengo:
se esperaba un objeto de rasgo `dyn std::io::Write`, se encontró una estructura `Stderr`
davy.ai
Parece que estás tratando de pasar una referencia a stderr a la estructura
ExecutionContext
, pero estás teniendo dificultades para hacerlo.El mensaje de error que estás recibiendo sugiere que el trait
Box<dyn std::io::write="">
no se satisface. Es posible que necesites importar el traitWrite
del módulostd::io
.También puede que necesites usar la palabra clave
impl
para especificar el traitWrite
al crear una nuevaBox<dyn write="">
.Una posible solución podría ser:
Este código importa el trait
Write
destd::io
y crea una nueva instancia destderr
. Luego, la instancia destderr
se pasa como referencia mutable aPin::new
, con el traitdyn Write
especificado utilizando la sintaxis&mut dyn Write
.