1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use serde::*;

#[derive(Serialize, Deserialize, Default)]
pub struct Visual {
    pub html: Option<String>,
    pub text: Option<String>,
    pub image: Option<String>,
    pub log: Option<String>,
    pub markdown: Option<String>,
}

pub trait Visualize {
    fn visualize(&self) -> Visual;
}

pub fn visualize(v: impl Visualize) -> String {
    serde_json::to_string(&v.visualize()).unwrap()
}