Traços como um valor de retorno de uma função [duplicado]
Esta pergunta já tem uma resposta aqui:
Como faço para retornar uma instância de uma característica de um método? 3 respostasEu tenho duas enums,NormalColour
eBoldColour
, os quais implementam oColour
traço. Eles contémBlue
, BoldGreen
, e assim por diante.
Eu gostaria de retornar valores de ambos os tipos da mesma função, tratando-os como se fossem apenas umColour
valor, chamando opaint
função no resultado, mas não consigo encontrar uma maneira de forçar o complacente do Rust a fazer isso por mim. Eu gostaria de poder escrever algo como isto:
pub trait Colour {
fn paint(&self, input: &str) -> String;
}
fn file_colour(stat: &io::FileStat) -> Colour {
if stat.kind == io::TypeDirectory {
Blue
} else if stat.perm & io::UserExecute == io::UserExecute {
BoldGreen
} else {
White
}
}
Que tipo eu tenho para fazer com que a função retorne para que ela funcione?
Acabarei gostando de fazer mais tipos implementarColour
, e é por isso que não estou interessado em transformar as duas enumerações em uma enumeração grande.