1 //! Markdown formatting. 2 //! 3 //! Sometimes, we want to display a "rich text" in the UI. At the moment, we use 4 //! markdown for this purpose. It doesn't feel like a right option, but that's 5 //! what is used by LSP, so let's keep it simple. 6 use std::fmt; 7 8 #[derive(Default, Debug)] 9 pub struct Markup { 10 text: String, 11 } 12 13 impl From<Markup> for String { from(markup: Markup) -> Self14 fn from(markup: Markup) -> Self { 15 markup.text 16 } 17 } 18 19 impl From<String> for Markup { from(text: String) -> Self20 fn from(text: String) -> Self { 21 Markup { text } 22 } 23 } 24 25 impl fmt::Display for Markup { fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result26 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 27 fmt::Display::fmt(&self.text, f) 28 } 29 } 30 31 impl Markup { as_str(&self) -> &str32 pub fn as_str(&self) -> &str { 33 self.text.as_str() 34 } fenced_block(contents: &impl fmt::Display) -> Markup35 pub fn fenced_block(contents: &impl fmt::Display) -> Markup { 36 format!("```rust\n{}\n```", contents).into() 37 } 38 } 39