From 1af69ca8e51e4f9098832bff5492e0b9803654db Mon Sep 17 00:00:00 2001 From: p11 Date: Sat, 31 May 2025 14:58:33 +0200 Subject: [PATCH] Moved complete save-load-logic to unshared site info --- src/main.rs | 58 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/src/main.rs b/src/main.rs index 238d4ea..c5fc812 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,6 +49,7 @@ struct SharedSiteInfo { down: AtomicUsize, } +#[derive(Default)] struct SiteInfo { comments: Vec, visits: usize, @@ -57,6 +58,22 @@ struct SiteInfo { } impl SharedSiteInfo { + fn new(info: SiteInfo) -> Self { + let SiteInfo { + comments, + visits, + up, + down, + } = info; + + Self { + comments: Mutex::new(comments), + visits: visits.into(), + up: up.into(), + down: down.into(), + } + } + fn update( self: &Arc, name: Option>, @@ -199,30 +216,28 @@ impl ToStream for SiteInfo { } } -impl FromStream for SharedSiteInfo { +impl FromStream for SiteInfo { fn from_stream(stream: &mut R) -> Result { let size = S::size_from_stream(stream)?; - let comments = Mutex::new( - (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 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(); + 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::>>()?, - ); + Ok(Comment { name, text }) + }) + .collect::>>()?; - let visits = S::size_from_stream(stream)?.into(); - let up = S::size_from_stream(stream)?.into(); - let down = S::size_from_stream(stream)?.into(); + let visits = S::size_from_stream(stream)?; + let up = S::size_from_stream(stream)?; + let down = S::size_from_stream(stream)?; Ok(Self { comments, @@ -455,7 +470,10 @@ fn handle_connection( .insert(Arc::new( File::open(&data_path) .map(|mut file| { - from_stream::(&mut file).unwrap_or_default() + SharedSiteInfo::new( + from_stream::(&mut file) + .unwrap_or_default(), + ) }) .unwrap_or_default(), ))