use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub type Table = HashMap<String, FriendlySnippetBody>;
#[derive(Debug, Serialize, Deserialize)]
pub struct FriendlySnippets {
#[serde(flatten)]
pub snippets: Table,
}
impl FriendlySnippets {
pub fn new() -> Self {
Self {
snippets: HashMap::new(),
}
}
}
impl Default for FriendlySnippets {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
pub struct FriendlySnippetBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
pub body: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
impl FriendlySnippetBody {
pub fn new(
prefix: Option<String>,
body: Vec<String>,
description: Option<String>,
) -> FriendlySnippetBody {
FriendlySnippetBody {
prefix,
body,
description,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_snippet_body_creation() {
let body = FriendlySnippetBody::new(
Some("snip".to_string()),
Vec::new(),
Some("Description".to_string()),
);
assert_eq!(body.prefix, Some("snip".to_string()));
assert_eq!(body.body.len(), 0);
}
#[test]
fn test_friendly_snippets() {
let mut hp: FriendlySnippets = FriendlySnippets {
snippets: HashMap::new(),
};
let body = FriendlySnippetBody::new(
Some("snip".to_string()),
Vec::new(),
Some("Description".to_string()),
);
let expected_body = FriendlySnippetBody::new(
Some("snip".to_string()),
Vec::new(),
Some("Description".to_string()),
);
hp.snippets.insert("test".to_string(), body);
assert_eq!(
hp.snippets.get(&"test".to_string()).unwrap(),
&expected_body
);
}
#[test]
fn friendly_description_is_none() {
let mut hp: FriendlySnippets = FriendlySnippets {
snippets: HashMap::new(),
};
let body = FriendlySnippetBody::new(Some("snip".to_string()), Vec::new(), None);
let expected_body = FriendlySnippetBody::new(Some("snip".to_string()), Vec::new(), None);
hp.snippets.insert("test".to_string(), body);
assert_eq!(
hp.snippets.get(&"test".to_string()).unwrap(),
&expected_body
);
}
}