diff --git a/Cargo.lock b/Cargo.lock index d6e47de..dd14b32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,14 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2653cb9243a7d4453127141c162c1ba619d99c7230f1d8ad0a9cdab9cf0651ea" +[[package]] +name = "comment-system" +version = "0.1.0" +source = "git+https://gitlab.com/porky11/comment-system#bdef78dd69fe726a7fdc44f58c6d97e2939fe743" +dependencies = [ + "data-stream", +] + [[package]] name = "data-stream" version = "0.3.0" @@ -250,6 +258,7 @@ name = "pukram-server" version = "0.1.0" dependencies = [ "chara", + "comment-system", "data-stream", "dialogi", "event-simulation", diff --git a/Cargo.toml b/Cargo.toml index a6063dc..98202b5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,3 +18,4 @@ multilinear = "0.3.1" multilinear-parser = "0.3.3" event-simulation = "0.1.2" chara = "0.2.0" +comment-system = { git = "https://gitlab.com/porky11/comment-system" } diff --git a/src/main.rs b/src/main.rs index d5263ce..63ef28a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::{ collections::{HashMap, hash_map::Entry}, env, fs::File, - io::{BufReader, Error, ErrorKind, Result, prelude::*}, + io::{BufReader, prelude::*}, net::{TcpListener, TcpStream}, path::{Path, PathBuf}, process::ExitCode, @@ -15,10 +15,8 @@ use std::{ }; use ::chara::CharacterDefinition; -use data_stream::{ - FromStream, ToStream, collections::SizeSettings, default_settings::PortableSettings, - from_stream, to_stream, -}; +use comment_system::{Comment, SiteInfo}; +use data_stream::{default_settings::PortableSettings, from_stream, to_stream}; use header_config::parse_config; use maud::html; use percent_encoding::percent_decode_str; @@ -34,12 +32,6 @@ mod vn; use request::Request; use tabs::{Tab, TabInfo, write_tab_styles}; -#[derive(Clone)] -struct Comment { - name: Box, - text: Box, -} - #[derive(Default)] struct SharedSiteInfo { comments: Mutex>, @@ -48,14 +40,6 @@ struct SharedSiteInfo { down: AtomicUsize, } -#[derive(Default)] -struct SiteInfo { - comments: Vec, - visits: usize, - up: usize, - down: usize, -} - impl SharedSiteInfo { fn new(info: SiteInfo) -> Self { let SiteInfo { @@ -194,59 +178,6 @@ fn fail(mut stream: TcpStream) { let _ = writeln!(stream, "Page not found!"); } -impl ToStream for SiteInfo { - fn to_stream(&self, stream: &mut W) -> Result<()> { - S::size_to_stream(self.comments.len(), stream)?; - for Comment { name, text } in &self.comments { - let name_bytes = name.as_bytes(); - S::size_to_stream(name_bytes.len(), stream)?; - stream.write_all(name_bytes)?; - - let text_bytes = text.as_bytes(); - S::size_to_stream(text_bytes.len(), stream)?; - stream.write_all(text_bytes)?; - } - - S::size_to_stream(self.visits, stream)?; - S::size_to_stream(self.up, stream)?; - S::size_to_stream(self.down, stream)?; - - Ok(()) - } -} - -impl FromStream for SiteInfo { - fn from_stream(stream: &mut R) -> Result { - let size = S::size_from_stream(stream)?; - let comments = (0..size) - .map(|_| { - let name_bytes = as FromStream>::from_stream(stream)?; - let name = std::str::from_utf8(&name_bytes) - .map_err(|e| Error::new(ErrorKind::InvalidData, e))? - .into(); - - let text_bytes = as FromStream>::from_stream(stream)?; - let text = std::str::from_utf8(&text_bytes) - .map_err(|e| Error::new(ErrorKind::InvalidData, e))? - .into(); - - Ok(Comment { name, text }) - }) - .collect::>>()?; - - let visits = S::size_from_stream(stream)?; - let up = S::size_from_stream(stream)?; - let down = S::size_from_stream(stream)?; - - Ok(Self { - comments, - visits, - up, - down, - }) - } -} - fn handle_connection( context: Arc>, path: PathBuf,