teo_runtime/traits/
documentable.rs1use 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}