teo_runtime/traits/
documentable.rs

1use inflector::Inflector;
2use crate::comment::Comment;
3use crate::traits::named::Named;
4
5pub trait Documentable: Named {
6
7    fn comment(&self) -> Option<&Comment>;
8
9    fn kind(&self) -> &'static str;
10
11    fn title(&self) -> String {
12        if let Some(title) = self.comment().as_ref().map(|c| c.name.as_ref()).flatten() {
13            title.clone()
14        } else {
15            self.name().to_sentence_case()
16        }
17    }
18
19    fn title_word_case(&self) -> String {
20        self.title().to_word_case()
21    }
22
23    fn desc(&self) -> String {
24        if let Some(desc) = self.comment().as_ref().map(|c| c.desc.as_ref()).flatten() {
25            desc.clone()
26        } else {
27            format!("This {} doesn't have a description.", self.kind())
28        }
29    }
30}