Defined comment system externally
This commit is contained in:
parent
7e0c4c80a3
commit
dad0adeb8c
9
Cargo.lock
generated
9
Cargo.lock
generated
@ -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",
|
||||
|
||||
@ -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" }
|
||||
|
||||
75
src/main.rs
75
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<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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user