Files
mercator_service/src/rest_api/spatial_objects.rs
Lionel Sambuc 66d19f7a2d Upgraded to actix_web 1.0+
* Some refactoring
 * Adding CORS support
 * Updating API & tests with 405 for the relevent calls
 * Fixing test so they can be run
2019-10-03 14:28:41 +02:00

122 lines
3.1 KiB
Rust

use std::sync::RwLock;
use actix_web::web;
use actix_web::web::Data;
use actix_web::web::Json;
use actix_web::web::Path;
use crate::shared_state::SharedState;
use super::error_400;
use super::error_404;
use super::ok_200;
use super::Filters;
use super::HandlerResult;
fn post(
(core_id, parameters, state): (
Path<String>,
Option<Json<Filters>>,
Data<RwLock<SharedState>>,
),
) -> HandlerResult {
trace!("POST Triggered!");
let core = core_id.to_string();
let context = state.read().unwrap();
match context.db().core(core) {
Ok(core) => {
let parameters = Filters::get(parameters);
// Generate a list of oid.
let mut results = match parameters.filters {
None => core.keys().iter().map(|o| o.id().clone()).collect(),
// FIXME: Specify from json output space + threshold volume
Some(filter) => match context.filter(&filter, &core_id, None, None) {
Err(_) => vec![], // FIXME: Return errors here instead!!
Ok(objects) => objects.iter().map(|o| o.value.id().clone()).collect(),
},
};
results.sort_unstable();
results.dedup();
ok_200(&results)
}
Err(_) => error_404(),
}
}
fn put() -> HandlerResult {
trace!("PUT Triggered!");
error_400()
}
fn patch() -> HandlerResult {
trace!("PATCH Triggered!");
error_400()
}
fn delete() -> HandlerResult {
trace!("DELETE Triggered!");
error_400()
}
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(
web::resource("/cores/{name}/spatial_objects")
.route(web::post().to(post))
.route(web::put().to(put))
.route(web::patch().to(patch))
.route(web::delete().to(delete)),
);
}
#[cfg(test)]
mod routing {
use super::super::tests_utils::*;
// FIXME: Add Body to request to see difference between (in)valid bodied requests
#[test]
fn post() {
expect_200(Method::POST, &get_objects(""));
json::expect_200(Method::POST, &get_objects(""), "".to_string());
json::expect_422(Method::POST, &get_objects(""), "".to_string());
expect_400(Method::POST, &get_objects(""));
}
#[test]
fn put() {
json::expect_200(Method::PUT, &get_objects(""), "".to_string());
json::expect_422(Method::PUT, &get_objects(""), "".to_string());
expect_400(Method::PUT, &get_objects(""));
}
#[test]
fn patch() {
json::expect_200(Method::PATCH, &get_objects(""), "".to_string());
json::expect_422(Method::PATCH, &get_objects(""), "".to_string());
expect_400(Method::PATCH, &get_objects(""));
}
#[test]
fn delete() {
json::expect_200(Method::DELETE, &get_objects(""), "".to_string());
json::expect_422(Method::DELETE, &get_objects(""), "".to_string());
expect_400(Method::DELETE, &get_objects(""));
}
#[test]
fn get() {
expect_405(Method::GET, &get_objects(""));
}
}