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 respuestas

Tengo 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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta