1
Fork 0

google form input

This commit is contained in:
Andy Killorin 2023-12-28 20:48:59 -06:00
parent 2bbf926eef
commit 42c1933780
Signed by: ank
GPG key ID: B6241CA3B552BCA4
3 changed files with 50 additions and 2 deletions

45
server/src/googleforms.rs Normal file
View file

@ -0,0 +1,45 @@
use anyhow::Ok;
use axum::{Router, routing::post, extract::State, Json};
use serde::{Deserialize, Serialize};
use tracing::{info, error};
use crate::{SharedControl, mine::Remove, blocks::Vec3};
pub fn forms_api() -> Router<SharedControl> {
Router::new()
.route("/registerVeinMine", post(remove_vein))
}
#[derive(Serialize, Deserialize)]
struct GoogleFormsRemoveVein{
#[serde(rename(deserialize = "Block name"))]
block: String,
#[serde(rename(deserialize = "X coordinate"))]
x: String,
#[serde(rename(deserialize = "Y coordinate"))]
y: String,
#[serde(rename(deserialize = "Z coordinate"))]
z: String,
}
async fn remove_vein(
State(state): State<SharedControl>,
Json(req): Json<GoogleFormsRemoveVein>,
) -> &'static str {
match remove_vein_inner(state, req).await {
anyhow::Result::Ok(_) => {},
anyhow::Result::Err(e) => error!("remove vein request failed: {e}"),
};
"ACK"
}
async fn remove_vein_inner(state: SharedControl, req: GoogleFormsRemoveVein) -> anyhow::Result<()> {
let state = state.read().await;
let mut schedule = state.tasks.lock().await;
let position = { Vec3::new(req.x.parse()?,req.y.parse()?,req.z.parse()?) };
let block = req.block;
info!("new remove {block} command from the internet at {position}");
schedule.add_task(Box::new(Remove::new(position,block)));
Ok(())
}

View file

@ -39,6 +39,7 @@ mod turtle;
mod turtle_api;
mod tasks;
mod depot;
mod googleforms;
static PORT: OnceCell<u16> = OnceCell::const_new();
static SAVE: OnceCell<path::PathBuf> = OnceCell::const_new();
@ -66,6 +67,7 @@ async fn main() -> Result<(), Error> {
.with_target("server::turtle", Level::WARN)
.with_target("server::paths", Level::ERROR)
.with_target("server::turtle_api", Level::INFO)
.with_target("server::googleforms", Level::TRACE)
.with_target("server::fell", Level::WARN)
.with_target("server::mine", Level::INFO)
.with_target("server::depot", Level::TRACE);
@ -124,6 +126,7 @@ async fn main() -> Result<(), Error> {
//.route("/turtle/:id/placeUp", get(place_up))
.route("/flush", get(flush))
.nest("/turtle", turtle_api::turtle_api())
.nest("/forms", googleforms::forms_api())
.layer(TraceLayer::new_for_http())
.with_state(state.clone());

View file

@ -554,7 +554,7 @@ mod tests {
}
#[derive(Serialize, Deserialize,Clone)]
struct Remove {
pub struct Remove {
start: Vec3,
block: String,
#[serde(skip_deserializing)]
@ -565,7 +565,7 @@ struct Remove {
}
impl Remove {
fn new(start: Vec3, block: String) ->
pub fn new(start: Vec3, block: String) ->
Self {
Self {
start, block, miners:Default::default(), done: Default::default(), pending: Default::default(),