[#1] Blog metadata can be stored using serde.

Created the initial blog data, posts and authors, and allows it to
be stored using serde.
This commit is contained in:
2025-08-22 10:46:38 -04:00
parent 35772ba1c6
commit 9dd87d0e42
10 changed files with 339 additions and 22 deletions

84
tests/serde.rs Normal file
View File

@ -0,0 +1,84 @@
use tavern::{Adventurer, Tale, Tavern};
fn generate_tavern() -> Tavern
{
let author: Adventurer = Adventurer
{
name: String::from("Jason Smith"),
handle: String::from("myrddin"),
profile: String::from("https://cybermages.tech/about/myrddin"),
image: String::from("https://cybermages.tech/about/myrddin/pic"),
blurb: String::from("I love code!")
};
let tale: Tale = Tale
{
title: String::from("Test post"),
slug: String::from("test_post"),
author: author.handle.clone(),
summary: String::from("The Moon is made of cheese!"),
tags: vec![String::from("Space"), String::from("Cheese")],
content: std::path::PathBuf::from("posts/test_post.md")
};
Tavern { tales: vec![tale], authors: vec![author]}
}
fn cleanup_temp_file(path: &std::path::PathBuf)
{
if path.exists()
{
let _ = std::fs::remove_file(path);
}
}
#[test]
fn to_file()
{
let tavern = generate_tavern();
let toml_string = toml::to_string_pretty(&tavern)
.expect("Serialization to TOML should succeed");
// Save the TOML to a temporary file.
let mut path = std::env::temp_dir();
path.push("tavern_test_out.toml");
std::fs::write(&path, &toml_string)
.expect("Failed to write TOML to file");
cleanup_temp_file(&path);
}
#[test]
fn from_file()
{
let tavern = generate_tavern();
let toml_string = toml::to_string_pretty(&tavern)
.expect("Serialization to TOML should succeed");
// Save the TOML to a temporary file.
let mut path = std::env::temp_dir();
path.push("tavern_test_in.toml");
std::fs::write(&path, &toml_string)
.expect("Failed to write TOML to file");
// Read the previously written TOML file
let toml_data = std::fs::read_to_string(&path)
.expect("Failed to read TOML file");
// Deserialize it
let tavern: Tavern = toml::from_str(&toml_data)
.expect("Failed to parse TOML");
// Assert some known values to make this a real test
let tale = &tavern.tales[0];
assert_eq!(tale.title, "Test post");
assert_eq!(tale.slug, "test_post");
assert_eq!(tale.author, "myrddin");
cleanup_temp_file(&path);
}