google form input
This commit is contained in:
parent
2bbf926eef
commit
42c1933780
3 changed files with 50 additions and 2 deletions
45
server/src/googleforms.rs
Normal file
45
server/src/googleforms.rs
Normal 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(())
|
||||
}
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in a new issue