Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839
  1. use serde::{Deserialize, Serialize};
  2. use serde_json;
  3. use std::fs::File;
  4. use std::io::prelude::*;
  5. use std::io::{Error, ErrorKind};
  6. use std::path::PathBuf;
  7. use crate::fs;
  8. #[derive(Debug, Serialize, Deserialize)]
  9. pub struct Post {
  10. pub id: String,
  11. pub title: String,
  12. pub body: String,
  13. pub date: String,
  14. }
  15. impl Post {
  16. pub async fn save(&mut self) -> std::io::Result<()> {
  17. let mut path: PathBuf = fs::get_posts_directory_path().await?;
  18. let filename = format!("{}.json", self.id);
  19. path = path.join(&filename);
  20. let mut file = File::create(&path)?;
  21. file.write_all(serde_json::to_string(&self)?.as_bytes())?;
  22. Ok(())
  23. }
  24. pub fn from_str(blob: &str) -> Result<Post, Error> {
  25. let mut post: Post = match serde_json::from_str(blob) {
  26. Ok(p) => Ok(p),
  27. Err(_) => Err(Error::new(
  28. ErrorKind::Other,
  29. format!("Error deserializing post"),
  30. )),
  31. }?;
  32. post.body = post.body.replace("\n", "<br>");
  33. Ok(post)
  34. }
  35. }