|
@@ -1,6 +1,6 @@
|
|
|
use std::collections::HashMap;
|
|
|
-use std::fmt::Write as FmtWrite;
|
|
|
-use std::io::{self, Write};
|
|
|
+use std::fmt::Write;
|
|
|
+use std::io;
|
|
|
|
|
|
use actix_http::Error;
|
|
|
use bytes::{Bytes, BytesMut};
|
|
@@ -8,54 +8,11 @@ use futures::stream::futures_unordered::FuturesUnordered;
|
|
|
use futures::{Future, FutureExt, StreamExt, TryStreamExt};
|
|
|
use rand::rngs::SmallRng;
|
|
|
use rand::{Rng, SeedableRng};
|
|
|
-use tokio_postgres::row::Row;
|
|
|
use tokio_postgres::types::ToSql;
|
|
|
use tokio_postgres::{connect, Client, NoTls, Statement};
|
|
|
|
|
|
use crate::models::World;
|
|
|
-use crate::utils::Writer;
|
|
|
-
|
|
|
-pub enum Message {
|
|
|
- Row(Row),
|
|
|
- Str(&'static str),
|
|
|
-}
|
|
|
-
|
|
|
-impl Message {
|
|
|
- fn as_str(&self) -> &str {
|
|
|
- match self {
|
|
|
- Message::Row(ref row) => row.get(1),
|
|
|
- Message::Str(s) => s,
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#[allow(non_snake_case)]
|
|
|
-pub struct Fortune {
|
|
|
- pub id: i32,
|
|
|
- pub message: Message,
|
|
|
-}
|
|
|
-
|
|
|
-markup::define! {
|
|
|
- FortunesTemplate(items: Vec<Fortune>) {
|
|
|
- {markup::doctype()}
|
|
|
- html {
|
|
|
- head {
|
|
|
- title { "Fortunes" }
|
|
|
- }
|
|
|
- body {
|
|
|
- table {
|
|
|
- tr { th { "id" } th { "message" } }
|
|
|
- @for item in {items} {
|
|
|
- tr {
|
|
|
- td { {item.id} }
|
|
|
- td { {markup::raw(v_htmlescape::escape(item.message.as_str()))} }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+use crate::utils::{Fortune, Writer};
|
|
|
|
|
|
/// Postgres interface
|
|
|
pub struct PgConnection {
|
|
@@ -200,10 +157,12 @@ impl PgConnection {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- pub fn tell_fortune(&mut self) -> impl Future<Output = Result<Bytes, io::Error>> {
|
|
|
+ pub fn tell_fortune(
|
|
|
+ &mut self,
|
|
|
+ ) -> impl Future<Output = Result<Vec<Fortune>, io::Error>> {
|
|
|
let mut items = vec![Fortune {
|
|
|
id: 0,
|
|
|
- message: Message::Str("Additional fortune added at request time."),
|
|
|
+ message: "Additional fortune added at request time.".to_string(),
|
|
|
}];
|
|
|
|
|
|
let fut = self.cl.query_raw(&self.fortune, &[]);
|
|
@@ -219,16 +178,12 @@ impl PgConnection {
|
|
|
})?;
|
|
|
items.push(Fortune {
|
|
|
id: row.get(0),
|
|
|
- message: Message::Row(row),
|
|
|
+ message: row.get(1),
|
|
|
});
|
|
|
}
|
|
|
- items.sort_by(|it, next| it.message.as_str().cmp(next.message.as_str()));
|
|
|
|
|
|
- let mut body = BytesMut::with_capacity(2048);
|
|
|
- let mut writer = Writer(&mut body);
|
|
|
- let _ = write!(writer, "{}", FortunesTemplate { items });
|
|
|
-
|
|
|
- Ok(body.freeze())
|
|
|
+ items.sort_by(|it, next| it.message.cmp(&next.message));
|
|
|
+ Ok(items)
|
|
|
}
|
|
|
}
|
|
|
}
|