Estou tentando obter alguns dados na forma de a &[u8]
, de duas fontes diferentes:
let result = if let Some(blob_id) = blob_id {
let blob = get_blob(blob_id);
Some(blob.data())
} else if let Some(file_path) = file_path {
std::fs::read(file_path).ok().as_deref()
} else {
None
};
Onde:
fn get_blob(blob_id: String) -> Blob {}
impl Blob {
pub fn data(&self) -> &[u8] {}
}
O problema é que isso leva a temporary value dropped while borrowed
erros, já que a result
variável faz referência à memória do blob ou do arquivo, mas esses objetos blob e arquivo são descartados no final de seus respectivos blocos if.
Qual é a maneira idiomática de fazer isso? Por contexto, quero processar esses dados posteriormente na mesma função, então não acho que Box
seja necessário colocar os dados na pilha com a?
Existe um truque menos conhecido para isso, baseado no fato de que o compilador pode rastrear variáveis inicializadas apenas em um caminho de código: