aboutsummaryrefslogblamecommitdiff
path: root/src/handlers/planets.rs
blob: 06773bc406e0f189220a409424c40b8d3bec12a3 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                        


                                 

                             
 
                                 
 
                                                      
                                                                                    
                                       
    
                                          



                         















































                                                                                    











                                                             























                                                                     
use axum::{response::IntoResponse, Json, extract::Path};

use tracing::{error, instrument};

use solarlib::star::Star;
use solarlib::planet::Planet;

use crate::{errors::*, get_star};

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)?;

    if let Ok(p) = star.find_planet(uuid) {
        return Ok(Json(p));
    } else {
        return Err(ServiceError::NotFound);
    }
}

pub async fn shutdown(Path(uuid): Path<String>) -> NoneResult {
    let con_url = std::env::var("QEMU_URL").unwrap_or("qemu:///system".to_string());
    let mut star = Star::new(con_url)?;

    if let Ok(p) = star.find_planet(uuid) {
        p.shutdown()?;
    } else {
        return Err(ServiceError::NotFound);
    }

    Ok(())
}

pub async fn start(Path(uuid): Path<String>) -> NoneResult {
    let mut s = get_star()?;

    if let Ok(p) = s.find_planet(uuid) {
        p.start()?;
    } else {
        return Err(ServiceError::NotFound);
    }

    Ok(())
}

pub async fn pause(Path(uuid): Path<String>) -> NoneResult {
    let mut s = get_star()?;

    if let Ok(p) = s.find_planet(uuid) {
        p.pause()?;
    } else {
        return Err(ServiceError::NotFound);
    }

    Ok(())
}

pub async fn reboot(Path(uuid): Path<String>) -> NoneResult {
    let mut s = get_star()?;

    if let Ok(p) = s.find_planet(uuid) {
        p.reboot()?;
    } else {
        return Err(ServiceError::NotFound);
    }
    
    Ok(())
}

pub async fn force_reboot(Path(uuid): Path<String>) -> NoneResult {
    let mut s = get_star()?;

    if let Ok(p) = s.find_planet(uuid) {
        p.hard_reboot()?;
    } else {
        return Err(ServiceError::NotFound);
    }

    Ok(())
}

pub async fn force_shutdown(Path(uuid): Path<String>) -> NoneResult {
    let mut s = get_star()?;

    if let Ok(p) = s.find_planet(uuid) {
        p.hard_shutdown()?;
    } else {
        return Err(ServiceError::NotFound);
    }

    Ok(())
}