Skip to main content

prosaic_project/
partial.rs

1//! `partials/*.toml` schema.
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct PartialFile {
7    pub name: String,
8    #[serde(default)]
9    pub description: String,
10    pub body: String,
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16
17    #[test]
18    fn parse_minimal_partial() {
19        let toml_str = r#"
20            name = "impact_tail"
21            body = "{?consumer_count}, affecting {consumer_count}{/?}"
22        "#;
23        let p: PartialFile = toml::from_str(toml_str).unwrap();
24        assert_eq!(p.name, "impact_tail");
25        assert!(p.body.contains("affecting"));
26    }
27
28    #[test]
29    fn missing_name_errors() {
30        let res = toml::from_str::<PartialFile>(r#"body = "x""#);
31        assert!(res.is_err());
32    }
33
34    #[test]
35    fn missing_body_errors() {
36        let res = toml::from_str::<PartialFile>(r#"name = "x""#);
37        assert!(res.is_err());
38    }
39}