Rasgos como valor de retorno de una función [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Cómo devuelvo una instancia de un rasgo de un método? 3 respuestasTengo dos enumeracionesNormalColour
yBoldColour
, los cuales implementan elColour
rasgo. ContienenBlue
, BoldGreen
, y así.
Me gustaría devolver valores de ambos tipos de la misma función, tratándolos como si fueran solo unColour
valor, llamando alpaint
funciona en el resultado, pero no puedo encontrar una manera de obligar al cumplidor de Rust a hacer esto por mí. Me gustaría poder escribir algo como esto:
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
}
}
¿Qué tipo tengo para que la función vuelva a funcionar?
Eventualmente me gustaría hacer implementar más tiposColour
, por eso no estoy interesado en convertir las dos enumeraciones en una gran enumeración.