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 respostas

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

questionAnswers(2)

yourAnswerToTheQuestion