123456789101112131415161718192021222324252627282930313233343536373839 |
- use serde::{Deserialize, Serialize};
- use serde_json;
- use std::fs::File;
- use std::io::prelude::*;
- use std::io::{Error, ErrorKind};
- use std::path::PathBuf;
-
- use crate::fs;
-
- #[derive(Debug, Serialize, Deserialize)]
- pub struct Post {
- pub id: String,
- pub title: String,
- pub body: String,
- pub date: String,
- }
-
- impl Post {
- pub async fn save(&mut self) -> std::io::Result<()> {
- let mut path: PathBuf = fs::get_posts_directory_path().await?;
- let filename = format!("{}.json", self.id);
- path = path.join(&filename);
- let mut file = File::create(&path)?;
- file.write_all(serde_json::to_string(&self)?.as_bytes())?;
- Ok(())
- }
-
- pub fn from_str(blob: &str) -> Result<Post, Error> {
- let mut post: Post = match serde_json::from_str(blob) {
- Ok(p) => Ok(p),
- Err(_) => Err(Error::new(
- ErrorKind::Other,
- format!("Error deserializing post"),
- )),
- }?;
- post.body = post.body.replace("\n", "<br>");
- Ok(post)
- }
- }
|