Defined comment system externally

This commit is contained in:
p11 2025-08-03 16:21:24 +02:00
parent 7e0c4c80a3
commit dad0adeb8c
3 changed files with 13 additions and 72 deletions

9
Cargo.lock generated
View File

@ -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",

View File

@ -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" }

View File

@ -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<str>,
text: Box<str>,
}
#[derive(Default)]
struct SharedSiteInfo {
comments: Mutex<Vec<Comment>>,
@ -48,14 +40,6 @@ struct SharedSiteInfo {
down: AtomicUsize,
}
#[derive(Default)]
struct SiteInfo {
comments: Vec<Comment>,
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<S: SizeSettings> ToStream<S> for SiteInfo {
fn to_stream<W: Write>(&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<S: SizeSettings> FromStream<S> for SiteInfo {
fn from_stream<R: Read>(stream: &mut R) -> Result<Self> {
let size = S::size_from_stream(stream)?;
let comments = (0..size)
.map(|_| {
let name_bytes = <Vec<_> as FromStream<S>>::from_stream(stream)?;
let name = std::str::from_utf8(&name_bytes)
.map_err(|e| Error::new(ErrorKind::InvalidData, e))?
.into();
let text_bytes = <Vec<_> as FromStream<S>>::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::<Result<Vec<_>>>()?;
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<Mutex<Context>>,
path: PathBuf,