use rossi::snippets::{SNIPPETS, Snippet};
pub fn render() -> String {
render_vscode_json(SNIPPETS)
}
pub fn render_vscode_json(snippets: &[Snippet]) -> String {
let mut out = String::new();
out.push_str("{\n");
for (i, snippet) in snippets.iter().enumerate() {
let comma = if i + 1 == snippets.len() { "" } else { "," };
out.push_str(&format!(" {}: {{\n", json_str(snippet.name)));
out.push_str(&format!(" \"prefix\": {},\n", json_str(snippet.prefix)));
out.push_str(" \"body\": [\n");
for (j, line) in snippet.body.iter().enumerate() {
let line_comma = if j + 1 == snippet.body.len() { "" } else { "," };
out.push_str(&format!(" {}{}\n", json_str(line), line_comma));
}
out.push_str(" ],\n");
out.push_str(&format!(
" \"description\": {}\n",
json_str(snippet.description)
));
out.push_str(&format!(" }}{comma}\n"));
}
out.push_str("}\n");
out
}
fn json_str(s: &str) -> String {
serde_json::to_string(s).expect("a &str always serializes to JSON")
}