Made site infos saveable on their own
This commit is contained in:
parent
4eb59a01b7
commit
8a1f94bb66
75
src/main.rs
75
src/main.rs
@ -60,21 +60,10 @@ struct SiteInfo {
|
|||||||
down: usize,
|
down: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
impl<S: SizeSettings> ToStream<S> for SiteInfo {
|
||||||
struct Context {
|
|
||||||
infos: HashMap<Box<str>, SiteInfo>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<S: SizeSettings> ToStream<S> for Context {
|
|
||||||
fn to_stream<W: Write>(&self, stream: &mut W) -> Result<()> {
|
fn to_stream<W: Write>(&self, stream: &mut W) -> Result<()> {
|
||||||
S::size_to_stream(self.infos.len(), stream)?;
|
S::size_to_stream(self.comments.len(), stream)?;
|
||||||
for (key, info) in &self.infos {
|
for Comment { name, text } in &self.comments {
|
||||||
let key_bytes = key.as_bytes();
|
|
||||||
S::size_to_stream(key_bytes.len(), stream)?;
|
|
||||||
stream.write_all(key_bytes)?;
|
|
||||||
|
|
||||||
S::size_to_stream(info.comments.len(), stream)?;
|
|
||||||
for Comment { name, text } in &info.comments {
|
|
||||||
let name_bytes = name.as_bytes();
|
let name_bytes = name.as_bytes();
|
||||||
S::size_to_stream(name_bytes.len(), stream)?;
|
S::size_to_stream(name_bytes.len(), stream)?;
|
||||||
stream.write_all(name_bytes)?;
|
stream.write_all(name_bytes)?;
|
||||||
@ -84,25 +73,16 @@ impl<S: SizeSettings> ToStream<S> for Context {
|
|||||||
stream.write_all(text_bytes)?;
|
stream.write_all(text_bytes)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
S::size_to_stream(info.visits, stream)?;
|
S::size_to_stream(self.visits, stream)?;
|
||||||
S::size_to_stream(info.up, stream)?;
|
S::size_to_stream(self.up, stream)?;
|
||||||
S::size_to_stream(info.down, stream)?;
|
S::size_to_stream(self.down, stream)?;
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<S: SizeSettings> FromStream<S> for Context {
|
impl<S: SizeSettings> FromStream<S> for SiteInfo {
|
||||||
fn from_stream<R: Read>(stream: &mut R) -> Result<Self> {
|
fn from_stream<R: Read>(stream: &mut R) -> Result<Self> {
|
||||||
let size = S::size_from_stream(stream)?;
|
|
||||||
let infos = (0..size)
|
|
||||||
.map(|_| {
|
|
||||||
let key_bytes = <Vec<_> as FromStream<S>>::from_stream(stream)?;
|
|
||||||
let key = std::str::from_utf8(&key_bytes)
|
|
||||||
.map_err(|e| Error::new(ErrorKind::InvalidData, e))?
|
|
||||||
.into();
|
|
||||||
|
|
||||||
let size = S::size_from_stream(stream)?;
|
let size = S::size_from_stream(stream)?;
|
||||||
let comments = (0..size)
|
let comments = (0..size)
|
||||||
.map(|_| {
|
.map(|_| {
|
||||||
@ -124,15 +104,46 @@ impl<S: SizeSettings> FromStream<S> for Context {
|
|||||||
let up = S::size_from_stream(stream)?;
|
let up = S::size_from_stream(stream)?;
|
||||||
let down = S::size_from_stream(stream)?;
|
let down = S::size_from_stream(stream)?;
|
||||||
|
|
||||||
Ok((
|
Ok(SiteInfo {
|
||||||
key,
|
|
||||||
SiteInfo {
|
|
||||||
comments,
|
comments,
|
||||||
visits,
|
visits,
|
||||||
up,
|
up,
|
||||||
down,
|
down,
|
||||||
},
|
})
|
||||||
))
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
struct Context {
|
||||||
|
infos: HashMap<Box<str>, SiteInfo>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S: SizeSettings> ToStream<S> for Context {
|
||||||
|
fn to_stream<W: Write>(&self, stream: &mut W) -> Result<()> {
|
||||||
|
S::size_to_stream(self.infos.len(), stream)?;
|
||||||
|
for (key, info) in &self.infos {
|
||||||
|
let key_bytes = key.as_bytes();
|
||||||
|
S::size_to_stream(key_bytes.len(), stream)?;
|
||||||
|
stream.write_all(key_bytes)?;
|
||||||
|
|
||||||
|
to_stream::<S, _, _>(info, stream)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S: SizeSettings> FromStream<S> for Context {
|
||||||
|
fn from_stream<R: Read>(stream: &mut R) -> Result<Self> {
|
||||||
|
let size = S::size_from_stream(stream)?;
|
||||||
|
let infos = (0..size)
|
||||||
|
.map(|_| {
|
||||||
|
let key_bytes = <Vec<_> as FromStream<S>>::from_stream(stream)?;
|
||||||
|
let key = std::str::from_utf8(&key_bytes)
|
||||||
|
.map_err(|e| Error::new(ErrorKind::InvalidData, e))?
|
||||||
|
.into();
|
||||||
|
|
||||||
|
Ok((key, from_stream::<S, SiteInfo, _>(stream)?))
|
||||||
})
|
})
|
||||||
.collect::<Result<HashMap<_, _>>>()?;
|
.collect::<Result<HashMap<_, _>>>()?;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user