Черты как возвращаемое значение из функции [дубликат]

На этот вопрос уже есть ответ здесь:

Как вернуть экземпляр черты из метода? 3 ответа

У меня есть два перечисления,NormalColour а такжеBoldColourоба из которых реализуютColour черта характера. Они содержатBlue, BoldGreen, и так далее.

Я хотел бы вернуть значения обоих этих типов из одной и той же функции, рассматривая их так, как будто они простоColour значение, вызывающееpaint на результат, но я не могу найти способ заставить Rust complier сделать это для меня. Я хотел бы иметь возможность написать что-то вроде этого:

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
    }
}

Какого типа я должен заставить функцию возвращаться, чтобы она работала?

Я в конечном итоге хотел бы сделать больше типов реализоватьColourВот почему я не заинтересован в том, чтобы просто превратить два перечисления в одно большое перечисление.

Ответы на вопрос(2)

Ваш ответ на вопрос