aboutsummaryrefslogtreecommitdiffstats
path: root/src/web_server
diff options
context:
space:
mode:
Diffstat (limited to 'src/web_server')
-rw-r--r--src/web_server/api.rs17
-rw-r--r--src/web_server/bot_data.rs47
-rw-r--r--src/web_server/bot_executor.rs63
-rw-r--r--src/web_server/default.rs17
-rw-r--r--src/web_server/tmtu.rs17
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())
}
}