diff options
| author | Jokler <jokler@protonmail.com> | 2020-10-14 00:19:27 +0200 |
|---|---|---|
| committer | Jokler <jokler@protonmail.com> | 2020-10-15 01:45:29 +0200 |
| commit | 4e1c2b9f04073294ecb8402486c20d9c01721598 (patch) | |
| tree | 93fe1d75477ae3d1c8466611a2cedd7bed316aa2 /src/web_server | |
| parent | 23671b51b4e207574a63bce820acbf43169e2b6c (diff) | |
| download | pokebot-4e1c2b9f04073294ecb8402486c20d9c01721598.tar.gz pokebot-4e1c2b9f04073294ecb8402486c20d9c01721598.zip | |
Replace channels&locks with actors & log with slog
Diffstat (limited to 'src/web_server')
| -rw-r--r-- | src/web_server/api.rs | 17 | ||||
| -rw-r--r-- | src/web_server/bot_data.rs | 47 | ||||
| -rw-r--r-- | src/web_server/bot_executor.rs | 63 | ||||
| -rw-r--r-- | src/web_server/default.rs | 17 | ||||
| -rw-r--r-- | src/web_server/tmtu.rs | 17 |
5 files changed, 72 insertions, 89 deletions
diff --git a/src/web_server/api.rs b/src/web_server/api.rs index 4deedad..b1d50c4 100644 --- a/src/web_server/api.rs +++ b/src/web_server/api.rs @@ -1,22 +1,23 @@ -use actix::Addr; use actix_web::{get, web, HttpResponse, Responder, ResponseError}; use derive_more::Display; use serde::Serialize; +use xtra::WeakAddress; -use crate::web_server::{BotDataListRequest, BotDataRequest, BotExecutor}; +use crate::web_server::{BotDataListRequest, BotDataRequest}; +use crate::MasterBot; #[get("/bots")] -pub async fn get_bot_list(bot: web::Data<Addr<BotExecutor>>) -> impl Responder { - let bot_datas = match bot.send(BotDataListRequest).await.unwrap() { - Ok(data) => data, - Err(_) => Vec::with_capacity(0), - }; +pub async fn get_bot_list(bot: web::Data<WeakAddress<MasterBot>>) -> impl Responder { + let bot_datas = bot.send(BotDataListRequest).await.unwrap(); web::Json(bot_datas) } #[get("/bots/{name}")] -pub async fn get_bot(bot: web::Data<Addr<BotExecutor>>, name: web::Path<String>) -> impl Responder { +pub async fn get_bot( + bot: web::Data<WeakAddress<MasterBot>>, + name: web::Path<String>, +) -> impl Responder { if let Some(bot_data) = bot.send(BotDataRequest(name.into_inner())).await.unwrap() { Ok(web::Json(bot_data)) } else { diff --git a/src/web_server/bot_data.rs b/src/web_server/bot_data.rs new file mode 100644 index 0000000..af0c5e1 --- /dev/null +++ b/src/web_server/bot_data.rs @@ -0,0 +1,47 @@ +use async_trait::async_trait; + +use xtra::{Context, Handler, Message}; + +use crate::bot::MasterBot; +use crate::web_server::BotData; + +pub struct BotNameListRequest; + +impl Message for BotNameListRequest { + type Result = Vec<String>; +} + +#[async_trait] +impl Handler<BotNameListRequest> for MasterBot { + async fn handle(&mut self, _: BotNameListRequest, _: &mut Context<Self>) -> Vec<String> { + self.bot_names() + } +} + +pub struct BotDataListRequest; + +impl Message for BotDataListRequest { + type Result = Vec<BotData>; +} + +#[async_trait] +impl Handler<BotDataListRequest> for MasterBot { + async fn handle(&mut self, _: BotDataListRequest, _: &mut Context<Self>) -> Vec<BotData> { + self.bot_datas().await + } +} + +pub struct BotDataRequest(pub String); + +impl Message for BotDataRequest { + type Result = Option<BotData>; +} + +#[async_trait] +impl Handler<BotDataRequest> for MasterBot { + async fn handle(&mut self, r: BotDataRequest, _: &mut Context<Self>) -> Option<BotData> { + let name = r.0; + + self.bot_data(name).await + } +} diff --git a/src/web_server/bot_executor.rs b/src/web_server/bot_executor.rs deleted file mode 100644 index 0d3e7b7..0000000 --- a/src/web_server/bot_executor.rs +++ /dev/null @@ -1,63 +0,0 @@ -use std::sync::Arc; - -use actix::{Actor, Context, Handler, Message}; - -use crate::bot::MasterBot; -use crate::web_server::BotData; - -pub struct BotExecutor(pub Arc<MasterBot>); - -impl Actor for BotExecutor { - type Context = Context<Self>; -} - -pub struct BotNameListRequest; - -impl Message for BotNameListRequest { - // A plain Vec does not work for some reason - type Result = Result<Vec<String>, ()>; -} - -impl Handler<BotNameListRequest> for BotExecutor { - type Result = Result<Vec<String>, ()>; - - fn handle(&mut self, _: BotNameListRequest, _: &mut Self::Context) -> Self::Result { - let bot = &self.0; - - Ok(bot.bot_names()) - } -} - -pub struct BotDataListRequest; - -impl Message for BotDataListRequest { - // A plain Vec does not work for some reason - type Result = Result<Vec<BotData>, ()>; -} - -impl Handler<BotDataListRequest> for BotExecutor { - type Result = Result<Vec<BotData>, ()>; - - fn handle(&mut self, _: BotDataListRequest, _: &mut Self::Context) -> Self::Result { - let bot = &self.0; - - Ok(bot.bot_datas()) - } -} - -pub struct BotDataRequest(pub String); - -impl Message for BotDataRequest { - type Result = Option<BotData>; -} - -impl Handler<BotDataRequest> for BotExecutor { - type Result = Option<BotData>; - - fn handle(&mut self, r: BotDataRequest, _: &mut Self::Context) -> Self::Result { - let name = r.0; - let bot = &self.0; - - bot.bot_data(name) - } -} diff --git a/src/web_server/default.rs b/src/web_server/default.rs index 542dade..6b15784 100644 --- a/src/web_server/default.rs +++ b/src/web_server/default.rs @@ -1,9 +1,9 @@ -use actix::Addr; use actix_web::{http::header, web, Error, HttpResponse}; -use askama::Template; -use askama_actix::TemplateIntoResponse; +use askama_actix::{Template, TemplateIntoResponse}; +use xtra::WeakAddress; -use crate::web_server::{filters, BotData, BotDataRequest, BotExecutor, BotNameListRequest}; +use crate::web_server::{filters, BotData, BotDataRequest, BotNameListRequest}; +use crate::MasterBot; #[derive(Template)] #[template(path = "index.htm")] @@ -12,8 +12,8 @@ struct OverviewTemplate<'a> { bot: Option<&'a BotData>, } -pub async fn index(bot: web::Data<Addr<BotExecutor>>) -> Result<HttpResponse, Error> { - let bot_names = bot.send(BotNameListRequest).await.unwrap().unwrap(); +pub async fn index(bot: web::Data<WeakAddress<MasterBot>>) -> Result<HttpResponse, Error> { + let bot_names = bot.send(BotNameListRequest).await.unwrap(); OverviewTemplate { bot_names: &bot_names, @@ -23,10 +23,10 @@ pub async fn index(bot: web::Data<Addr<BotExecutor>>) -> Result<HttpResponse, Er } pub async fn get_bot( - bot: web::Data<Addr<BotExecutor>>, + bot: web::Data<WeakAddress<MasterBot>>, name: String, ) -> Result<HttpResponse, Error> { - let bot_names = bot.send(BotNameListRequest).await.unwrap().unwrap(); + let bot_names = bot.send(BotNameListRequest).await.unwrap(); if let Some(bot) = bot.send(BotDataRequest(name)).await.unwrap() { OverviewTemplate { @@ -35,7 +35,6 @@ pub async fn get_bot( } .into_response() } else { - // TODO to 404 or not to 404 Ok(HttpResponse::Found().header(header::LOCATION, "/").finish()) } } diff --git a/src/web_server/tmtu.rs b/src/web_server/tmtu.rs index 33a14af..e9eea98 100644 --- a/src/web_server/tmtu.rs +++ b/src/web_server/tmtu.rs @@ -1,9 +1,9 @@ -use actix::Addr; use actix_web::{http::header, web, Error, HttpResponse}; -use askama::Template; -use askama_actix::TemplateIntoResponse; +use askama_actix::{Template, TemplateIntoResponse}; +use xtra::WeakAddress; -use crate::web_server::{filters, BotData, BotDataRequest, BotExecutor, BotNameListRequest}; +use crate::web_server::{filters, BotData, BotDataRequest, BotNameListRequest}; +use crate::MasterBot; #[derive(Template)] #[template(path = "tmtu/index.htm")] @@ -12,8 +12,8 @@ struct TmtuTemplate { bot: Option<BotData>, } -pub async fn index(bot: web::Data<Addr<BotExecutor>>) -> Result<HttpResponse, Error> { - let bot_names = bot.send(BotNameListRequest).await.unwrap().unwrap(); +pub async fn index(bot: web::Data<WeakAddress<MasterBot>>) -> Result<HttpResponse, Error> { + let bot_names = bot.send(BotNameListRequest).await.unwrap(); TmtuTemplate { bot_names, @@ -23,10 +23,10 @@ pub async fn index(bot: web::Data<Addr<BotExecutor>>) -> Result<HttpResponse, Er } pub async fn get_bot( - bot: web::Data<Addr<BotExecutor>>, + bot: web::Data<WeakAddress<MasterBot>>, name: String, ) -> Result<HttpResponse, Error> { - let bot_names = bot.send(BotNameListRequest).await.unwrap().unwrap(); + let bot_names = bot.send(BotNameListRequest).await.unwrap(); if let Some(bot) = bot.send(BotDataRequest(name)).await.unwrap() { TmtuTemplate { @@ -35,7 +35,6 @@ pub async fn get_bot( } .into_response() } else { - // TODO to 404 or not to 404 Ok(HttpResponse::Found().header(header::LOCATION, "/").finish()) } } |
