aboutsummaryrefslogtreecommitdiffstats
path: root/rust/fatcat-api/src/server/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/fatcat-api/src/server/mod.rs')
-rw-r--r--rust/fatcat-api/src/server/mod.rs2485
1 files changed, 0 insertions, 2485 deletions
diff --git a/rust/fatcat-api/src/server/mod.rs b/rust/fatcat-api/src/server/mod.rs
deleted file mode 100644
index 186f8272..00000000
--- a/rust/fatcat-api/src/server/mod.rs
+++ /dev/null
@@ -1,2485 +0,0 @@
-#![allow(unused_extern_crates)]
-extern crate chrono;
-extern crate hyper_tls;
-extern crate mime;
-extern crate native_tls;
-extern crate openssl;
-extern crate serde_ignored;
-extern crate tokio_core;
-extern crate uuid;
-
-extern crate percent_encoding;
-extern crate url;
-
-use self::url::form_urlencoded;
-use futures::{future, stream, Future, Stream};
-use hyper;
-use hyper::header::{ContentType, Headers};
-use hyper::{Error, Request, Response, StatusCode};
-use mimetypes;
-use std::sync::Arc;
-
-use serde_json;
-
-#[allow(unused_imports)]
-use std::collections::{BTreeMap, HashMap};
-use std::io;
-#[allow(unused_imports)]
-use swagger;
-
-#[allow(unused_imports)]
-use std::collections::BTreeSet;
-
-pub use swagger::auth::Authorization;
-use swagger::auth::Scopes;
-use swagger::{ApiError, Context, XSpanId};
-
-#[allow(unused_imports)]
-use models;
-use {Api, ContainerIdGetResponse, ContainerLookupGetResponse, ContainerPostResponse,
- CreatorIdGetResponse, CreatorLookupGetResponse, CreatorPostResponse,
- EditgroupIdAcceptPostResponse, EditgroupIdGetResponse, EditgroupPostResponse,
- EditorUsernameChangelogGetResponse, EditorUsernameGetResponse, FileIdGetResponse,
- FileLookupGetResponse, FilePostResponse, ReleaseIdGetResponse, ReleaseLookupGetResponse,
- ReleasePostResponse, WorkIdGetResponse, WorkPostResponse};
-
-pub mod auth;
-
-header! { (Warning, "Warning") => [String] }
-
-mod paths {
- extern crate regex;
-
- lazy_static! {
- pub static ref GLOBAL_REGEX_SET: regex::RegexSet = regex::RegexSet::new(&[
- r"^/v0/container$",
- r"^/v0/container/lookup$",
- r"^/v0/container/(?P<id>[^/?#]*)$",
- r"^/v0/creator$",
- r"^/v0/creator/lookup$",
- r"^/v0/creator/(?P<id>[^/?#]*)$",
- r"^/v0/editgroup$",
- r"^/v0/editgroup/(?P<id>[^/?#]*)$",
- r"^/v0/editgroup/(?P<id>[^/?#]*)/accept$",
- r"^/v0/editor/(?P<username>[^/?#]*)$",
- r"^/v0/editor/(?P<username>[^/?#]*)/changelog$",
- r"^/v0/file$",
- r"^/v0/file/lookup$",
- r"^/v0/file/(?P<id>[^/?#]*)$",
- r"^/v0/release$",
- r"^/v0/release/lookup$",
- r"^/v0/release/(?P<id>[^/?#]*)$",
- r"^/v0/work$",
- r"^/v0/work/(?P<id>[^/?#]*)$"
- ]).unwrap();
- }
- pub static ID_CONTAINER: usize = 0;
- pub static ID_CONTAINER_LOOKUP: usize = 1;
- pub static ID_CONTAINER_ID: usize = 2;
- lazy_static! {
- pub static ref REGEX_CONTAINER_ID: regex::Regex =
- regex::Regex::new(r"^/v0/container/(?P<id>[^/?#]*)$").unwrap();
- }
- pub static ID_CREATOR: usize = 3;
- pub static ID_CREATOR_LOOKUP: usize = 4;
- pub static ID_CREATOR_ID: usize = 5;
- lazy_static! {
- pub static ref REGEX_CREATOR_ID: regex::Regex =
- regex::Regex::new(r"^/v0/creator/(?P<id>[^/?#]*)$").unwrap();
- }
- pub static ID_EDITGROUP: usize = 6;
- pub static ID_EDITGROUP_ID: usize = 7;
- lazy_static! {
- pub static ref REGEX_EDITGROUP_ID: regex::Regex =
- regex::Regex::new(r"^/v0/editgroup/(?P<id>[^/?#]*)$").unwrap();
- }
- pub static ID_EDITGROUP_ID_ACCEPT: usize = 8;
- lazy_static! {
- pub static ref REGEX_EDITGROUP_ID_ACCEPT: regex::Regex =
- regex::Regex::new(r"^/v0/editgroup/(?P<id>[^/?#]*)/accept$").unwrap();
- }
- pub static ID_EDITOR_USERNAME: usize = 9;
- lazy_static! {
- pub static ref REGEX_EDITOR_USERNAME: regex::Regex =
- regex::Regex::new(r"^/v0/editor/(?P<username>[^/?#]*)$").unwrap();
- }
- pub static ID_EDITOR_USERNAME_CHANGELOG: usize = 10;
- lazy_static! {
- pub static ref REGEX_EDITOR_USERNAME_CHANGELOG: regex::Regex =
- regex::Regex::new(r"^/v0/editor/(?P<username>[^/?#]*)/changelog$").unwrap();
- }
- pub static ID_FILE: usize = 11;
- pub static ID_FILE_LOOKUP: usize = 12;
- pub static ID_FILE_ID: usize = 13;
- lazy_static! {
- pub static ref REGEX_FILE_ID: regex::Regex =
- regex::Regex::new(r"^/v0/file/(?P<id>[^/?#]*)$").unwrap();
- }
- pub static ID_RELEASE: usize = 14;
- pub static ID_RELEASE_LOOKUP: usize = 15;
- pub static ID_RELEASE_ID: usize = 16;
- lazy_static! {
- pub static ref REGEX_RELEASE_ID: regex::Regex =
- regex::Regex::new(r"^/v0/release/(?P<id>[^/?#]*)$").unwrap();
- }
- pub static ID_WORK: usize = 17;
- pub static ID_WORK_ID: usize = 18;
- lazy_static! {
- pub static ref REGEX_WORK_ID: regex::Regex =
- regex::Regex::new(r"^/v0/work/(?P<id>[^/?#]*)$").unwrap();
- }
-}
-
-pub struct NewService<T> {
- api_impl: Arc<T>,
-}
-
-impl<T> NewService<T>
-where
- T: Api + Clone + 'static,
-{
- pub fn new<U: Into<Arc<T>>>(api_impl: U) -> NewService<T> {
- NewService {
- api_impl: api_impl.into(),
- }
- }
-}
-
-impl<T> hyper::server::NewService for NewService<T>
-where
- T: Api + Clone + 'static,
-{
- type Request = (Request, Context);
- type Response = Response;
- type Error = Error;
- type Instance = Service<T>;
-
- fn new_service(&self) -> Result<Self::Instance, io::Error> {
- Ok(Service::new(self.api_impl.clone()))
- }
-}
-
-pub struct Service<T> {
- api_impl: Arc<T>,
-}
-
-impl<T> Service<T>
-where
- T: Api + Clone + 'static,
-{
- pub fn new<U: Into<Arc<T>>>(api_impl: U) -> Service<T> {
- Service {
- api_impl: api_impl.into(),
- }
- }
-}
-
-impl<T> hyper::server::Service for Service<T>
-where
- T: Api + Clone + 'static,
-{
- type Request = (Request, Context);
- type Response = Response;
- type Error = Error;
- type Future = Box<Future<Item = Response, Error = Error>>;
-
- fn call(&self, (req, mut context): Self::Request) -> Self::Future {
- let api_impl = self.api_impl.clone();
- let (method, uri, _, headers, body) = req.deconstruct();
- let path = paths::GLOBAL_REGEX_SET.matches(uri.path());
- match &method {
- // ContainerIdGet - GET /container/{id}
- &hyper::Method::Get if path.matched(paths::ID_CONTAINER_ID) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_CONTAINER_ID
- .captures(&path)
- .unwrap_or_else(|| {
- panic!("Path {} matched RE CONTAINER_ID in set but failed match against \"{}\"", path, paths::REGEX_CONTAINER_ID.as_str())
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<String>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.container_id_get(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- ContainerIdGetResponse::FetchASingleContainerById
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_ID_GET_FETCH_A_SINGLE_CONTAINER_BY_ID.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ContainerIdGetResponse::BadRequest
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_ID_GET_BAD_REQUEST.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ContainerIdGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_ID_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // ContainerLookupGet - GET /container/lookup
- &hyper::Method::Get if path.matched(paths::ID_CONTAINER_LOOKUP) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Query parameters (note that non-required or collection query parameters will ignore garbage values, rather than causing a 400 response)
- let query_params = form_urlencoded::parse(
- uri.query().unwrap_or_default().as_bytes(),
- ).collect::<Vec<_>>();
- let param_issn = query_params
- .iter()
- .filter(|e| e.0 == "issn")
- .map(|e| e.1.to_owned())
- .nth(0);
- let param_issn = match param_issn {
- Some(param_issn) => match param_issn.parse::<String>() {
- Ok(param_issn) => param_issn,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't parse query parameter issn - doesn't match schema: {}",
- e
- )),
- ))
- }
- },
- None => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body("Missing required query parameter issn"),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.container_lookup_get(param_issn, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- ContainerLookupGetResponse::FindASingleContainerByExternalIdentifer
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_LOOKUP_GET_FIND_A_SINGLE_CONTAINER_BY_EXTERNAL_IDENTIFER.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ContainerLookupGetResponse::BadRequest
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_LOOKUP_GET_BAD_REQUEST.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ContainerLookupGetResponse::NoSuchContainer
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_LOOKUP_GET_NO_SUCH_CONTAINER.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ContainerLookupGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_LOOKUP_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // ContainerPost - POST /container
- &hyper::Method::Post if path.matched(paths::ID_CONTAINER) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Body parameters (note that non-required body parameters will ignore garbage
- // values, rather than causing a 400 response). Produce warning header and logs for
- // any unused fields.
- Box::new(body.concat2().then(
- move |result| -> Box<Future<Item = Response, Error = Error>> {
- match result {
- Ok(body) => {
- let mut unused_elements = Vec::new();
- let param_body: Option<
- models::ContainerEntity,
- > = if !body.is_empty() {
- let deserializer =
- &mut serde_json::Deserializer::from_slice(&*body);
-
- match serde_ignored::deserialize(deserializer, |path| {
- warn!("Ignoring unknown field in body: {}", path);
- unused_elements.push(path.to_string());
- }) {
- Ok(param_body) => param_body,
-
- Err(_) => None,
- }
- } else {
- None
- };
-
- Box::new(api_impl.container_post(param_body, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- if !unused_elements.is_empty() {
- response.headers_mut().set(Warning(format!(
- "Ignoring unknown fields in body: {:?}",
- unused_elements
- )));
- }
-
- match result {
- Ok(rsp) => match rsp {
- ContainerPostResponse::Created(body) => {
- response.set_status(
- StatusCode::try_from(201).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_POST_CREATED.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- ContainerPostResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_POST_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- ContainerPostResponse::GenericErrorResponse(
- body,
- ) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CONTAINER_POST_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- Err(e) => Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't read body parameter body: {}", e)),
- )),
- }
- },
- )) as Box<Future<Item = Response, Error = Error>>
- }
-
- // CreatorIdGet - GET /creator/{id}
- &hyper::Method::Get if path.matched(paths::ID_CREATOR_ID) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_CREATOR_ID.captures(&path).unwrap_or_else(|| {
- panic!(
- "Path {} matched RE CREATOR_ID in set but failed match against \"{}\"",
- path,
- paths::REGEX_CREATOR_ID.as_str()
- )
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<String>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.creator_id_get(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- CreatorIdGetResponse::FetchASingleCreatorById(
- body,
- ) => {
- response.set_status(
- StatusCode::try_from(200).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_ID_GET_FETCH_A_SINGLE_CREATOR_BY_ID.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- CreatorIdGetResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_ID_GET_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- CreatorIdGetResponse::GenericErrorResponse(
- body,
- ) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_ID_GET_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // CreatorLookupGet - GET /creator/lookup
- &hyper::Method::Get if path.matched(paths::ID_CREATOR_LOOKUP) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Query parameters (note that non-required or collection query parameters will ignore garbage values, rather than causing a 400 response)
- let query_params = form_urlencoded::parse(
- uri.query().unwrap_or_default().as_bytes(),
- ).collect::<Vec<_>>();
- let param_orcid = query_params
- .iter()
- .filter(|e| e.0 == "orcid")
- .map(|e| e.1.to_owned())
- .nth(0);
- let param_orcid = match param_orcid {
- Some(param_orcid) => match param_orcid.parse::<String>() {
- Ok(param_orcid) => param_orcid,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't parse query parameter orcid - doesn't match schema: {}",
- e
- )),
- ))
- }
- },
- None => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body("Missing required query parameter orcid"),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.creator_lookup_get(param_orcid, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- CreatorLookupGetResponse::FindASingleCreatorByExternalIdentifer
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_LOOKUP_GET_FIND_A_SINGLE_CREATOR_BY_EXTERNAL_IDENTIFER.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- CreatorLookupGetResponse::BadRequest
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_LOOKUP_GET_BAD_REQUEST.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- CreatorLookupGetResponse::NoSuchCreator
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_LOOKUP_GET_NO_SUCH_CREATOR.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- CreatorLookupGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_LOOKUP_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // CreatorPost - POST /creator
- &hyper::Method::Post if path.matched(paths::ID_CREATOR) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Body parameters (note that non-required body parameters will ignore garbage
- // values, rather than causing a 400 response). Produce warning header and logs for
- // any unused fields.
- Box::new(body.concat2().then(
- move |result| -> Box<Future<Item = Response, Error = Error>> {
- match result {
- Ok(body) => {
- let mut unused_elements = Vec::new();
- let param_body: Option<
- models::CreatorEntity,
- > = if !body.is_empty() {
- let deserializer =
- &mut serde_json::Deserializer::from_slice(&*body);
-
- match serde_ignored::deserialize(deserializer, |path| {
- warn!("Ignoring unknown field in body: {}", path);
- unused_elements.push(path.to_string());
- }) {
- Ok(param_body) => param_body,
-
- Err(_) => None,
- }
- } else {
- None
- };
-
- Box::new(api_impl.creator_post(param_body, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- if !unused_elements.is_empty() {
- response.headers_mut().set(Warning(format!(
- "Ignoring unknown fields in body: {:?}",
- unused_elements
- )));
- }
-
- match result {
- Ok(rsp) => match rsp {
- CreatorPostResponse::Created(body) => {
- response.set_status(
- StatusCode::try_from(201).unwrap(),
- );
-
- response.headers_mut().set(ContentType(
- mimetypes::responses::CREATOR_POST_CREATED
- .clone(),
- ));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- CreatorPostResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_POST_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- CreatorPostResponse::GenericErrorResponse(body) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::CREATOR_POST_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- Err(e) => Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't read body parameter body: {}", e)),
- )),
- }
- },
- )) as Box<Future<Item = Response, Error = Error>>
- }
-
- // EditgroupIdAcceptPost - POST /editgroup/{id}/accept
- &hyper::Method::Post if path.matched(paths::ID_EDITGROUP_ID_ACCEPT) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_EDITGROUP_ID_ACCEPT
- .captures(&path)
- .unwrap_or_else(|| {
- panic!("Path {} matched RE EDITGROUP_ID_ACCEPT in set but failed match against \"{}\"", path, paths::REGEX_EDITGROUP_ID_ACCEPT.as_str())
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<i32>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(
- api_impl.editgroup_id_accept_post(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- EditgroupIdAcceptPostResponse::MergedEditgroupSuccessfully_
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_ACCEPT_POST_MERGED_EDITGROUP_SUCCESSFULLY_.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditgroupIdAcceptPostResponse::EditgroupIsInAnUnmergableState
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_ACCEPT_POST_EDITGROUP_IS_IN_AN_UNMERGABLE_STATE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditgroupIdAcceptPostResponse::NoSuchEditgroup
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_ACCEPT_POST_NO_SUCH_EDITGROUP.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditgroupIdAcceptPostResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_ACCEPT_POST_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ),
- )
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // EditgroupIdGet - GET /editgroup/{id}
- &hyper::Method::Get if path.matched(paths::ID_EDITGROUP_ID) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_EDITGROUP_ID
- .captures(&path)
- .unwrap_or_else(|| {
- panic!("Path {} matched RE EDITGROUP_ID in set but failed match against \"{}\"", path, paths::REGEX_EDITGROUP_ID.as_str())
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<i32>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.editgroup_id_get(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- EditgroupIdGetResponse::FetchEditgroupByIdentifier
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_GET_FETCH_EDITGROUP_BY_IDENTIFIER.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditgroupIdGetResponse::NoSuchEditgroup
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_GET_NO_SUCH_EDITGROUP.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditgroupIdGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_ID_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // EditgroupPost - POST /editgroup
- &hyper::Method::Post if path.matched(paths::ID_EDITGROUP) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.editgroup_post(&context).then(move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- EditgroupPostResponse::SuccessfullyCreated(body) => {
- response
- .set_status(StatusCode::try_from(201).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_POST_SUCCESSFULLY_CREATED.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- EditgroupPostResponse::InvalidRequestParameters(
- body,
- ) => {
- response
- .set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_POST_INVALID_REQUEST_PARAMETERS.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- EditgroupPostResponse::GenericErrorResponse(body) => {
- response
- .set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITGROUP_POST_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- }))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // EditorUsernameChangelogGet - GET /editor/{username}/changelog
- &hyper::Method::Get if path.matched(paths::ID_EDITOR_USERNAME_CHANGELOG) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_EDITOR_USERNAME_CHANGELOG
- .captures(&path)
- .unwrap_or_else(|| {
- panic!("Path {} matched RE EDITOR_USERNAME_CHANGELOG in set but failed match against \"{}\"", path, paths::REGEX_EDITOR_USERNAME_CHANGELOG.as_str())
- });
-
- let param_username = match percent_encoding::percent_decode(
- path_params["username"].as_bytes(),
- ).decode_utf8()
- {
- Ok(param_username) => match param_username.parse::<String>() {
- Ok(param_username) => param_username,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't parse path parameter username: {}",
- e
- )),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["username"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(
- api_impl
- .editor_username_changelog_get(param_username, &context)
- .then(move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- EditorUsernameChangelogGetResponse::FindChanges_
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITOR_USERNAME_CHANGELOG_GET_FIND_CHANGES_.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditorUsernameChangelogGetResponse::UsernameNotFound
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITOR_USERNAME_CHANGELOG_GET_USERNAME_NOT_FOUND.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditorUsernameChangelogGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITOR_USERNAME_CHANGELOG_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- }),
- )
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // EditorUsernameGet - GET /editor/{username}
- &hyper::Method::Get if path.matched(paths::ID_EDITOR_USERNAME) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_EDITOR_USERNAME.captures(&path).unwrap_or_else(
- || {
- panic!("Path {} matched RE EDITOR_USERNAME in set but failed match against \"{}\"", path, paths::REGEX_EDITOR_USERNAME.as_str())
- },
- );
-
- let param_username = match percent_encoding::percent_decode(
- path_params["username"].as_bytes(),
- ).decode_utf8()
- {
- Ok(param_username) => match param_username.parse::<String>() {
- Ok(param_username) => param_username,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't parse path parameter username: {}",
- e
- )),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["username"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(
- api_impl.editor_username_get(param_username, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- EditorUsernameGetResponse::FetchGenericInformationAboutAnEditor
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITOR_USERNAME_GET_FETCH_GENERIC_INFORMATION_ABOUT_AN_EDITOR.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditorUsernameGetResponse::UsernameNotFound
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITOR_USERNAME_GET_USERNAME_NOT_FOUND.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- EditorUsernameGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::EDITOR_USERNAME_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ),
- )
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // FileIdGet - GET /file/{id}
- &hyper::Method::Get if path.matched(paths::ID_FILE_ID) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_FILE_ID.captures(&path).unwrap_or_else(|| {
- panic!(
- "Path {} matched RE FILE_ID in set but failed match against \"{}\"",
- path,
- paths::REGEX_FILE_ID.as_str()
- )
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<String>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.file_id_get(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- FileIdGetResponse::FetchASingleFileById(body) => {
- response.set_status(
- StatusCode::try_from(200).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_ID_GET_FETCH_A_SINGLE_FILE_BY_ID.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- FileIdGetResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_ID_GET_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- FileIdGetResponse::GenericErrorResponse(body) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_ID_GET_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // FileLookupGet - GET /file/lookup
- &hyper::Method::Get if path.matched(paths::ID_FILE_LOOKUP) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Query parameters (note that non-required or collection query parameters will ignore garbage values, rather than causing a 400 response)
- let query_params = form_urlencoded::parse(
- uri.query().unwrap_or_default().as_bytes(),
- ).collect::<Vec<_>>();
- let param_sha1 = query_params
- .iter()
- .filter(|e| e.0 == "sha1")
- .map(|e| e.1.to_owned())
- .nth(0);
- let param_sha1 = match param_sha1 {
- Some(param_sha1) => match param_sha1.parse::<String>() {
- Ok(param_sha1) => param_sha1,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't parse query parameter sha1 - doesn't match schema: {}",
- e
- )),
- ))
- }
- },
- None => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body("Missing required query parameter sha1"),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.file_lookup_get(param_sha1, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- FileLookupGetResponse::FindASingleFileByExternalIdentifer
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_LOOKUP_GET_FIND_A_SINGLE_FILE_BY_EXTERNAL_IDENTIFER.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- FileLookupGetResponse::BadRequest
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_LOOKUP_GET_BAD_REQUEST.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- FileLookupGetResponse::NoSuchFile
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_LOOKUP_GET_NO_SUCH_FILE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- FileLookupGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_LOOKUP_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // FilePost - POST /file
- &hyper::Method::Post if path.matched(paths::ID_FILE) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Body parameters (note that non-required body parameters will ignore garbage
- // values, rather than causing a 400 response). Produce warning header and logs for
- // any unused fields.
- Box::new(body.concat2().then(
- move |result| -> Box<Future<Item = Response, Error = Error>> {
- match result {
- Ok(body) => {
- let mut unused_elements = Vec::new();
- let param_body: Option<
- models::FileEntity,
- > = if !body.is_empty() {
- let deserializer =
- &mut serde_json::Deserializer::from_slice(&*body);
-
- match serde_ignored::deserialize(deserializer, |path| {
- warn!("Ignoring unknown field in body: {}", path);
- unused_elements.push(path.to_string());
- }) {
- Ok(param_body) => param_body,
-
- Err(_) => None,
- }
- } else {
- None
- };
-
- Box::new(api_impl.file_post(param_body, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- if !unused_elements.is_empty() {
- response.headers_mut().set(Warning(format!(
- "Ignoring unknown fields in body: {:?}",
- unused_elements
- )));
- }
-
- match result {
- Ok(rsp) => match rsp {
- FilePostResponse::Created(body) => {
- response.set_status(
- StatusCode::try_from(201).unwrap(),
- );
-
- response.headers_mut().set(ContentType(
- mimetypes::responses::FILE_POST_CREATED
- .clone(),
- ));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- FilePostResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(
- mimetypes::responses::FILE_POST_BAD_REQUEST
- .clone(),
- ));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- FilePostResponse::GenericErrorResponse(body) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::FILE_POST_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- Err(e) => Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't read body parameter body: {}", e)),
- )),
- }
- },
- )) as Box<Future<Item = Response, Error = Error>>
- }
-
- // ReleaseIdGet - GET /release/{id}
- &hyper::Method::Get if path.matched(paths::ID_RELEASE_ID) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_RELEASE_ID.captures(&path).unwrap_or_else(|| {
- panic!(
- "Path {} matched RE RELEASE_ID in set but failed match against \"{}\"",
- path,
- paths::REGEX_RELEASE_ID.as_str()
- )
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<String>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.release_id_get(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- ReleaseIdGetResponse::FetchASingleReleaseById(
- body,
- ) => {
- response.set_status(
- StatusCode::try_from(200).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_ID_GET_FETCH_A_SINGLE_RELEASE_BY_ID.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- ReleaseIdGetResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_ID_GET_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- ReleaseIdGetResponse::GenericErrorResponse(
- body,
- ) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_ID_GET_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // ReleaseLookupGet - GET /release/lookup
- &hyper::Method::Get if path.matched(paths::ID_RELEASE_LOOKUP) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Query parameters (note that non-required or collection query parameters will ignore garbage values, rather than causing a 400 response)
- let query_params = form_urlencoded::parse(
- uri.query().unwrap_or_default().as_bytes(),
- ).collect::<Vec<_>>();
- let param_doi = query_params
- .iter()
- .filter(|e| e.0 == "doi")
- .map(|e| e.1.to_owned())
- .nth(0);
- let param_doi = match param_doi {
- Some(param_doi) => match param_doi.parse::<String>() {
- Ok(param_doi) => param_doi,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't parse query parameter doi - doesn't match schema: {}",
- e
- )),
- ))
- }
- },
- None => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body("Missing required query parameter doi"),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.release_lookup_get(param_doi, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- ReleaseLookupGetResponse::FindASingleReleaseByExternalIdentifer
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(200).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_LOOKUP_GET_FIND_A_SINGLE_RELEASE_BY_EXTERNAL_IDENTIFER.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ReleaseLookupGetResponse::BadRequest
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(400).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_LOOKUP_GET_BAD_REQUEST.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ReleaseLookupGetResponse::NoSuchRelease
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(404).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_LOOKUP_GET_NO_SUCH_RELEASE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- ReleaseLookupGetResponse::GenericErrorResponse
-
- (body)
-
-
- => {
- response.set_status(StatusCode::try_from(0).unwrap());
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_LOOKUP_GET_GENERIC_ERROR_RESPONSE.clone()));
-
-
- let body = serde_json::to_string(&body).expect("impossible to fail to serialize");
-
- response.set_body(body);
- },
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response.set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- },
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // ReleasePost - POST /release
- &hyper::Method::Post if path.matched(paths::ID_RELEASE) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Body parameters (note that non-required body parameters will ignore garbage
- // values, rather than causing a 400 response). Produce warning header and logs for
- // any unused fields.
- Box::new(body.concat2().then(
- move |result| -> Box<Future<Item = Response, Error = Error>> {
- match result {
- Ok(body) => {
- let mut unused_elements = Vec::new();
- let param_body: Option<
- models::ReleaseEntity,
- > = if !body.is_empty() {
- let deserializer =
- &mut serde_json::Deserializer::from_slice(&*body);
-
- match serde_ignored::deserialize(deserializer, |path| {
- warn!("Ignoring unknown field in body: {}", path);
- unused_elements.push(path.to_string());
- }) {
- Ok(param_body) => param_body,
-
- Err(_) => None,
- }
- } else {
- None
- };
-
- Box::new(api_impl.release_post(param_body, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- if !unused_elements.is_empty() {
- response.headers_mut().set(Warning(format!(
- "Ignoring unknown fields in body: {:?}",
- unused_elements
- )));
- }
-
- match result {
- Ok(rsp) => match rsp {
- ReleasePostResponse::Created(body) => {
- response.set_status(
- StatusCode::try_from(201).unwrap(),
- );
-
- response.headers_mut().set(ContentType(
- mimetypes::responses::RELEASE_POST_CREATED
- .clone(),
- ));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- ReleasePostResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_POST_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- ReleasePostResponse::GenericErrorResponse(body) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::RELEASE_POST_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- Err(e) => Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't read body parameter body: {}", e)),
- )),
- }
- },
- )) as Box<Future<Item = Response, Error = Error>>
- }
-
- // WorkIdGet - GET /work/{id}
- &hyper::Method::Get if path.matched(paths::ID_WORK_ID) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Path parameters
- let path = uri.path().to_string();
- let path_params = paths::REGEX_WORK_ID.captures(&path).unwrap_or_else(|| {
- panic!(
- "Path {} matched RE WORK_ID in set but failed match against \"{}\"",
- path,
- paths::REGEX_WORK_ID.as_str()
- )
- });
-
- let param_id = match percent_encoding::percent_decode(path_params["id"].as_bytes())
- .decode_utf8()
- {
- Ok(param_id) => match param_id.parse::<String>() {
- Ok(param_id) => param_id,
- Err(e) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't parse path parameter id: {}", e)),
- ))
- }
- },
- Err(_) => {
- return Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!(
- "Couldn't percent-decode path parameter as UTF-8: {}",
- &path_params["id"]
- )),
- ))
- }
- };
-
- Box::new(
- ({
- {
- {
- Box::new(api_impl.work_id_get(param_id, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- match result {
- Ok(rsp) => match rsp {
- WorkIdGetResponse::FetchASingleWorkById(body) => {
- response.set_status(
- StatusCode::try_from(200).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::WORK_ID_GET_FETCH_A_SINGLE_WORK_BY_ID.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- WorkIdGetResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::WORK_ID_GET_BAD_REQUEST.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- WorkIdGetResponse::GenericErrorResponse(body) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::WORK_ID_GET_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- }
- }),
- ) as Box<Future<Item = Response, Error = Error>>
- }
-
- // WorkPost - POST /work
- &hyper::Method::Post if path.matched(paths::ID_WORK) => {
- if context.x_span_id.is_none() {
- context.x_span_id = Some(
- headers
- .get::<XSpanId>()
- .map(XSpanId::to_string)
- .unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()),
- );
- }
-
- // Body parameters (note that non-required body parameters will ignore garbage
- // values, rather than causing a 400 response). Produce warning header and logs for
- // any unused fields.
- Box::new(body.concat2().then(
- move |result| -> Box<Future<Item = Response, Error = Error>> {
- match result {
- Ok(body) => {
- let mut unused_elements = Vec::new();
- let param_body: Option<
- models::WorkEntity,
- > = if !body.is_empty() {
- let deserializer =
- &mut serde_json::Deserializer::from_slice(&*body);
-
- match serde_ignored::deserialize(deserializer, |path| {
- warn!("Ignoring unknown field in body: {}", path);
- unused_elements.push(path.to_string());
- }) {
- Ok(param_body) => param_body,
-
- Err(_) => None,
- }
- } else {
- None
- };
-
- Box::new(api_impl.work_post(param_body, &context).then(
- move |result| {
- let mut response = Response::new();
- context.x_span_id.as_ref().map(|header| {
- response.headers_mut().set(XSpanId(header.clone()))
- });
-
- if !unused_elements.is_empty() {
- response.headers_mut().set(Warning(format!(
- "Ignoring unknown fields in body: {:?}",
- unused_elements
- )));
- }
-
- match result {
- Ok(rsp) => match rsp {
- WorkPostResponse::Created(body) => {
- response.set_status(
- StatusCode::try_from(201).unwrap(),
- );
-
- response.headers_mut().set(ContentType(
- mimetypes::responses::WORK_POST_CREATED
- .clone(),
- ));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- WorkPostResponse::BadRequest(body) => {
- response.set_status(
- StatusCode::try_from(400).unwrap(),
- );
-
- response.headers_mut().set(ContentType(
- mimetypes::responses::WORK_POST_BAD_REQUEST
- .clone(),
- ));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- WorkPostResponse::GenericErrorResponse(body) => {
- response.set_status(
- StatusCode::try_from(0).unwrap(),
- );
-
- response.headers_mut().set(ContentType(mimetypes::responses::WORK_POST_GENERIC_ERROR_RESPONSE.clone()));
-
- let body = serde_json::to_string(&body)
- .expect("impossible to fail to serialize");
-
- response.set_body(body);
- }
- },
- Err(_) => {
- // Application code returned an error. This should not happen, as the implementation should
- // return a valid response.
- response
- .set_status(StatusCode::InternalServerError);
- response.set_body("An internal error occurred");
- }
- }
-
- future::ok(response)
- },
- ))
- }
- Err(e) => Box::new(future::ok(
- Response::new()
- .with_status(StatusCode::BadRequest)
- .with_body(format!("Couldn't read body parameter body: {}", e)),
- )),
- }
- },
- )) as Box<Future<Item = Response, Error = Error>>
- }
-
- _ => Box::new(future::ok(
- Response::new().with_status(StatusCode::NotFound),
- )) as Box<Future<Item = Response, Error = Error>>,
- }
- }
-}