diff options
Diffstat (limited to 'src/handlers/planets.rs')
-rw-r--r-- | src/handlers/planets.rs | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/src/handlers/planets.rs b/src/handlers/planets.rs index 2c66324..8593026 100644 --- a/src/handlers/planets.rs +++ b/src/handlers/planets.rs @@ -1,14 +1,14 @@ use axum::Extension; +use axum::{extract::Path, response::IntoResponse, Json}; use axum_macros::debug_handler; -use axum::{response::IntoResponse, Json, extract::Path}; use solarlib::ship::{DbShip, Ship}; use tokio::process::Command; use tracing::{error, instrument}; -use solarlib::star::{Star, NewPlanet}; -use solarlib::planet::Planet; use solarlib::errors::Error as SolarlibError; +use solarlib::planet::Planet; +use solarlib::star::{NewPlanet, Star}; use crate::{errors::*, get_star, State}; use std::sync::Arc; @@ -16,14 +16,13 @@ use std::sync::Arc; pub async fn list() -> JsonResult<Json<Vec<Planet>>> { let con_url = std::env::var("QEMU_URL").unwrap_or("qemu:///system".to_string()); let mut star = Star::new(con_url)?; - + let inhabitants = star.inhabitants()?; Ok(Json(inhabitants)) } pub async fn get(Path(uuid): Path<String>) -> JsonResult<Json<Planet>> { - let con_url = std::env::var("QEMU_URL").unwrap_or("qemu:///system".to_string()); let mut star = Star::new(con_url)?; @@ -79,7 +78,7 @@ pub async fn reboot(Path(uuid): Path<String>) -> NoneResult { } else { return Err(ServiceError::NotFound); } - + Ok(()) } @@ -113,7 +112,10 @@ pub async fn new_planet(Json(new_planet): Json<NewPlanet>) -> JsonResult<Json<Pl let ship_shasum = new_planet.clone().ship; - let res: DbShip = reqwest::get(format!("http://{}/ships/get/{}", hw_url, ship_shasum)).await?.json().await?; + let res: DbShip = reqwest::get(format!("http://{}/ships/get/{}", hw_url, ship_shasum)) + .await? + .json() + .await?; let ship: Ship = res.into(); let mut s = get_star()?; @@ -122,17 +124,27 @@ pub async fn new_planet(Json(new_planet): Json<NewPlanet>) -> JsonResult<Json<Pl // Try to create right away, if the Ship already exists on the system, it'll go through. If // not, we can download it by using the shasum - let r = s.planet(new_planet.clone().name, new_planet.max_mem, new_planet.max_cpus, new_planet.disk_size_mb, ship.clone()); + let r = s.planet( + new_planet.clone().name, + new_planet.max_mem, + new_planet.max_cpus, + new_planet.disk_size_mb, + ship.clone(), + ); match r { - Err(e) => { - match e { - SolarlibError::MissingImage(_) => { - ship.download(&s)?; - return Ok(Json(s.planet(new_planet.name, new_planet.max_mem, new_planet.max_cpus, new_planet.disk_size_mb, ship.clone())?)); - }, - _ => { - return Err(ServiceError::Solarlib(e)); - } + Err(e) => match e { + SolarlibError::MissingImage(_) => { + ship.download(&s)?; + return Ok(Json(s.planet( + new_planet.name, + new_planet.max_mem, + new_planet.max_cpus, + new_planet.disk_size_mb, + ship.clone(), + )?)); + } + _ => { + return Err(ServiceError::Solarlib(e)); } }, Ok(r) => { @@ -142,7 +154,6 @@ pub async fn new_planet(Json(new_planet): Json<NewPlanet>) -> JsonResult<Json<Pl }; } - pub async fn no_planet(Path(uuid): Path<String>) -> NoneResult { let mut s = get_star()?; |