From 0a71247fb61a91c1f6d519762013c1445713a728 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Wed, 13 Oct 2021 17:42:41 -0700 Subject: codegen for API schema v0.4.0 --- fatcat-openapi/README.md | 6 +- fatcat-openapi/docs/ContainerEntity.md | 3 + fatcat-openapi/docs/FilesetFile.md | 3 +- fatcat-openapi/docs/ReleaseExtIds.md | 1 + fatcat-openapi/docs/default_api.md | 39 +++++ fatcat-openapi/examples/client/main.rs | 21 ++- fatcat-openapi/examples/server/server.rs | 33 +++- fatcat-openapi/src/client/mod.rs | 148 +++++++++++++++++- fatcat-openapi/src/lib.rs | 58 ++++++- fatcat-openapi/src/models.rs | 81 +++++++++- fatcat-openapi/src/server/mod.rs | 256 ++++++++++++++++++++++++++----- 11 files changed, 591 insertions(+), 58 deletions(-) (limited to 'fatcat-openapi') diff --git a/fatcat-openapi/README.md b/fatcat-openapi/README.md index acb0fbc..c8a4276 100644 --- a/fatcat-openapi/README.md +++ b/fatcat-openapi/README.md @@ -15,8 +15,8 @@ To see how to make this your own, look here: [README]((https://openapi-generator.tech)) -- API version: 0.3.3 -- Build date: 2021-02-02T11:39:37.681488-08:00[America/Los_Angeles] +- API version: 0.4.0 +- Build date: 2021-10-13T17:40:53.852359-07:00[America/Los_Angeles] For more information, please visit [https://fatcat.wiki](https://fatcat.wiki) @@ -130,6 +130,7 @@ cargo run --example client GetWorkReleases cargo run --example client GetWorkRevision cargo run --example client LookupContainer cargo run --example client LookupCreator +cargo run --example client LookupEditor cargo run --example client LookupFile cargo run --example client LookupRelease ``` @@ -249,6 +250,7 @@ Method | HTTP request | Description [**get_work_revision**](docs/default_api.md#get_work_revision) | **GET** /work/rev/{rev_id} | [**lookup_container**](docs/default_api.md#lookup_container) | **GET** /container/lookup | [**lookup_creator**](docs/default_api.md#lookup_creator) | **GET** /creator/lookup | +[**lookup_editor**](docs/default_api.md#lookup_editor) | **GET** /editor/lookup | [**lookup_file**](docs/default_api.md#lookup_file) | **GET** /file/lookup | [**lookup_release**](docs/default_api.md#lookup_release) | **GET** /release/lookup | [**update_container**](docs/default_api.md#update_container) | **PUT** /editgroup/{editgroup_id}/container/{ident} | diff --git a/fatcat-openapi/docs/ContainerEntity.md b/fatcat-openapi/docs/ContainerEntity.md index 376130e..e42b28e 100644 --- a/fatcat-openapi/docs/ContainerEntity.md +++ b/fatcat-openapi/docs/ContainerEntity.md @@ -11,8 +11,11 @@ Name | Type | Description | Notes **edit_extra** | [**std::collections::HashMap**](AnyType.md) | Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). | [optional] [default to None] **name** | **String** | Name of the container (eg, Journal title). Required for entity creation. | [optional] [default to None] **container_type** | **String** | Type of container, eg 'journal' or 'proceedings'. See Guide for list of valid types. | [optional] [default to None] +**publication_status** | **String** | Whether the container is active, discontinued, etc | [optional] [default to None] **publisher** | **String** | Name of the organization or entity responsible for publication. Not the complete imprint/brand. | [optional] [default to None] **issnl** | **String** | Linking ISSN number (ISSN-L). Should be valid and registered with issn.org | [optional] [default to None] +**issne** | **String** | Electronic ISSN number (ISSN-E). Should be valid and registered with issn.org | [optional] [default to None] +**issnp** | **String** | Print ISSN number (ISSN-P). Should be valid and registered with issn.org | [optional] [default to None] **wikidata_qid** | **String** | | [optional] [default to None] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/fatcat-openapi/docs/FilesetFile.md b/fatcat-openapi/docs/FilesetFile.md index b023e4a..24d4b11 100644 --- a/fatcat-openapi/docs/FilesetFile.md +++ b/fatcat-openapi/docs/FilesetFile.md @@ -8,7 +8,8 @@ Name | Type | Description | Notes **md5** | **String** | MD5 hash of data, in hex encoding | [optional] [default to None] **sha1** | **String** | SHA-1 hash of data, in hex encoding | [optional] [default to None] **sha256** | **String** | SHA-256 hash of data, in hex encoding | [optional] [default to None] -**extra** | [**std::collections::HashMap**](AnyType.md) | Free-form additional metadata about this specific file in the set. Eg, `mimetype`. See guide for nomative (but unenforced) schema fields. | [optional] [default to None] +**mimetype** | **String** | | [optional] [default to None] +**extra** | [**std::collections::HashMap**](AnyType.md) | Free-form additional metadata about this specific file in the set. Eg, `original_url`. See guide for normative (but unenforced) schema fields. | [optional] [default to None] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/fatcat-openapi/docs/ReleaseExtIds.md b/fatcat-openapi/docs/ReleaseExtIds.md index 416d595..8afa1fe 100644 --- a/fatcat-openapi/docs/ReleaseExtIds.md +++ b/fatcat-openapi/docs/ReleaseExtIds.md @@ -16,6 +16,7 @@ Name | Type | Description | Notes **doaj** | **String** | DOAJ article-level identifier | [optional] [default to None] **dblp** | **String** | dblp (https://dblp.uni-trier.de/) paper identifier; eg for conference proceedings | [optional] [default to None] **oai** | **String** | OAI-PMH identifier; only used when an OAI-PMH record is the only authoritative metadata (eg, journal OAI-PMH feeds w/o DOIs) | [optional] [default to None] +**hdl** | **String** | Handle identifier. Do not put DOIs in this field | [optional] [default to None] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/fatcat-openapi/docs/default_api.md b/fatcat-openapi/docs/default_api.md index 5308e84..5adc6d9 100644 --- a/fatcat-openapi/docs/default_api.md +++ b/fatcat-openapi/docs/default_api.md @@ -88,6 +88,7 @@ Method | HTTP request | Description **get_work_revision**](default_api.md#get_work_revision) | **GET** /work/rev/{rev_id} | **lookup_container**](default_api.md#lookup_container) | **GET** /container/lookup | **lookup_creator**](default_api.md#lookup_creator) | **GET** /creator/lookup | +**lookup_editor**](default_api.md#lookup_editor) | **GET** /editor/lookup | **lookup_file**](default_api.md#lookup_file) | **GET** /file/lookup | **lookup_release**](default_api.md#lookup_release) | **GET** /release/lookup | **update_container**](default_api.md#update_container) | **PUT** /editgroup/{editgroup_id}/container/{ident} | @@ -2611,6 +2612,9 @@ Optional parameters are passed through a map[string]interface{}. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **issnl** | **String**| | + **issne** | **String**| | + **issnp** | **String**| | + **issn** | **String**| | **wikidata_qid** | **String**| | **expand** | **String**| List of sub-entities to expand in response. See `get_container`. | **hide** | **String**| List of entity fields to elide in response. See `get_container`. | @@ -2665,6 +2669,40 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **lookup_editor** +> models::Editor lookup_editor(optional) + + +Fetches editor by, eg, username. One (and only one) lookup identifier should be specified per request. + +### Required Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **optional** | **map[string]interface{}** | optional parameters | nil if no parameters + +### Optional Parameters +Optional parameters are passed through a map[string]interface{}. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **String**| | + +### Return type + +[**models::Editor**](editor.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **lookup_file** > models::FileEntity lookup_file(optional) @@ -2731,6 +2769,7 @@ Name | Type | Description | Notes **doaj** | **String**| | **dblp** | **String**| | **oai** | **String**| | + **hdl** | **String**| | **expand** | **String**| List of sub-entities to expand in response. See `get_release`. | **hide** | **String**| List of sub-entities to elide in response. See `get_release`. | diff --git a/fatcat-openapi/examples/client/main.rs b/fatcat-openapi/examples/client/main.rs index 14a1bdf..716cbe1 100644 --- a/fatcat-openapi/examples/client/main.rs +++ b/fatcat-openapi/examples/client/main.rs @@ -29,10 +29,10 @@ use fatcat_openapi::{ GetWebcaptureHistoryResponse, GetWebcaptureRedirectsResponse, GetWebcaptureResponse, GetWebcaptureRevisionResponse, GetWorkEditResponse, GetWorkHistoryResponse, GetWorkRedirectsResponse, GetWorkReleasesResponse, GetWorkResponse, GetWorkRevisionResponse, - LookupContainerResponse, LookupCreatorResponse, LookupFileResponse, LookupReleaseResponse, - UpdateContainerResponse, UpdateCreatorResponse, UpdateEditgroupResponse, UpdateEditorResponse, - UpdateFileResponse, UpdateFilesetResponse, UpdateReleaseResponse, UpdateWebcaptureResponse, - UpdateWorkResponse, + LookupContainerResponse, LookupCreatorResponse, LookupEditorResponse, LookupFileResponse, + LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, UpdateEditgroupResponse, + UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, UpdateReleaseResponse, + UpdateWebcaptureResponse, UpdateWorkResponse, }; #[allow(unused_imports)] use futures::{future, stream, Stream}; @@ -128,6 +128,7 @@ fn main() { "GetWorkRevision", "LookupContainer", "LookupCreator", + "LookupEditor", "LookupFile", "LookupRelease", ]) @@ -991,6 +992,9 @@ fn main() { Some("LookupContainer") => { let result = rt.block_on(client.lookup_container( Some("issnl_example".to_string()), + Some("issne_example".to_string()), + Some("issnp_example".to_string()), + Some("issn_example".to_string()), Some("wikidata_qid_example".to_string()), Some("expand_example".to_string()), Some("hide_example".to_string()), @@ -1014,6 +1018,14 @@ fn main() { (client.context() as &dyn Has).get().clone() ); } + Some("LookupEditor") => { + let result = rt.block_on(client.lookup_editor(Some("username_example".to_string()))); + info!( + "{:?} (X-Span-ID: {:?})", + result, + (client.context() as &dyn Has).get().clone() + ); + } Some("LookupFile") => { let result = rt.block_on(client.lookup_file( Some("md5_example".to_string()), @@ -1043,6 +1055,7 @@ fn main() { Some("doaj_example".to_string()), Some("dblp_example".to_string()), Some("oai_example".to_string()), + Some("hdl_example".to_string()), Some("expand_example".to_string()), Some("hide_example".to_string()), )); diff --git a/fatcat-openapi/examples/server/server.rs b/fatcat-openapi/examples/server/server.rs index 981487e..d09b080 100644 --- a/fatcat-openapi/examples/server/server.rs +++ b/fatcat-openapi/examples/server/server.rs @@ -132,10 +132,10 @@ use fatcat_openapi::{ GetWebcaptureEditResponse, GetWebcaptureHistoryResponse, GetWebcaptureRedirectsResponse, GetWebcaptureResponse, GetWebcaptureRevisionResponse, GetWorkEditResponse, GetWorkHistoryResponse, GetWorkRedirectsResponse, GetWorkReleasesResponse, GetWorkResponse, - GetWorkRevisionResponse, LookupContainerResponse, LookupCreatorResponse, LookupFileResponse, - LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, UpdateEditgroupResponse, - UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, UpdateReleaseResponse, - UpdateWebcaptureResponse, UpdateWorkResponse, + GetWorkRevisionResponse, LookupContainerResponse, LookupCreatorResponse, LookupEditorResponse, + LookupFileResponse, LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, + UpdateEditgroupResponse, UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, + UpdateReleaseResponse, UpdateWebcaptureResponse, UpdateWorkResponse, }; use std::error::Error; use swagger::ApiError; @@ -1442,6 +1442,9 @@ where async fn lookup_container( &self, issnl: Option, + issne: Option, + issnp: Option, + issn: Option, wikidata_qid: Option, expand: Option, hide: Option, @@ -1449,8 +1452,11 @@ where ) -> Result { let context = context.clone(); info!( - "lookup_container({:?}, {:?}, {:?}, {:?}) - X-Span-ID: {:?}", + "lookup_container({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}) - X-Span-ID: {:?}", issnl, + issne, + issnp, + issn, wikidata_qid, expand, hide, @@ -1479,6 +1485,20 @@ where Err("Generic failuare".into()) } + async fn lookup_editor( + &self, + username: Option, + context: &C, + ) -> Result { + let context = context.clone(); + info!( + "lookup_editor({:?}) - X-Span-ID: {:?}", + username, + context.get().0.clone() + ); + Err("Generic failuare".into()) + } + async fn lookup_file( &self, md5: Option, @@ -1516,12 +1536,13 @@ where doaj: Option, dblp: Option, oai: Option, + hdl: Option, expand: Option, hide: Option, context: &C, ) -> Result { let context = context.clone(); - info!("lookup_release({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}) - X-Span-ID: {:?}", doi, wikidata_qid, isbn13, pmid, pmcid, core, arxiv, jstor, ark, mag, doaj, dblp, oai, expand, hide, context.get().0.clone()); + info!("lookup_release({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}) - X-Span-ID: {:?}", doi, wikidata_qid, isbn13, pmid, pmcid, core, arxiv, jstor, ark, mag, doaj, dblp, oai, hdl, expand, hide, context.get().0.clone()); Err("Generic failuare".into()) } diff --git a/fatcat-openapi/src/client/mod.rs b/fatcat-openapi/src/client/mod.rs index bb1cee8..774f6ee 100644 --- a/fatcat-openapi/src/client/mod.rs +++ b/fatcat-openapi/src/client/mod.rs @@ -67,10 +67,10 @@ use crate::{ GetWebcaptureEditResponse, GetWebcaptureHistoryResponse, GetWebcaptureRedirectsResponse, GetWebcaptureResponse, GetWebcaptureRevisionResponse, GetWorkEditResponse, GetWorkHistoryResponse, GetWorkRedirectsResponse, GetWorkReleasesResponse, GetWorkResponse, - GetWorkRevisionResponse, LookupContainerResponse, LookupCreatorResponse, LookupFileResponse, - LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, UpdateEditgroupResponse, - UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, UpdateReleaseResponse, - UpdateWebcaptureResponse, UpdateWorkResponse, + GetWorkRevisionResponse, LookupContainerResponse, LookupCreatorResponse, LookupEditorResponse, + LookupFileResponse, LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, + UpdateEditgroupResponse, UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, + UpdateReleaseResponse, UpdateWebcaptureResponse, UpdateWorkResponse, }; /// Convert input into a base path, e.g. "http://example:123". Also checks the scheme as it goes. @@ -13589,6 +13589,9 @@ where async fn lookup_container( &self, param_issnl: Option, + param_issne: Option, + param_issnp: Option, + param_issn: Option, param_wikidata_qid: Option, param_expand: Option, param_hide: Option, @@ -13603,6 +13606,15 @@ where if let Some(param_issnl) = param_issnl { query_string.append_pair("issnl", ¶m_issnl.to_string()); } + if let Some(param_issne) = param_issne { + query_string.append_pair("issne", ¶m_issne.to_string()); + } + if let Some(param_issnp) = param_issnp { + query_string.append_pair("issnp", ¶m_issnp.to_string()); + } + if let Some(param_issn) = param_issn { + query_string.append_pair("issn", ¶m_issn.to_string()); + } if let Some(param_wikidata_qid) = param_wikidata_qid { query_string.append_pair("wikidata_qid", ¶m_wikidata_qid.to_string()); } @@ -13858,6 +13870,130 @@ where } } + async fn lookup_editor( + &self, + param_username: Option, + context: &C, + ) -> Result { + let mut client_service = self.client_service.clone(); + let mut uri = format!("{}/v0/editor/lookup", self.base_path); + + // Query parameters + let query_string = { + let mut query_string = form_urlencoded::Serializer::new("".to_owned()); + if let Some(param_username) = param_username { + query_string.append_pair("username", ¶m_username.to_string()); + } + query_string.finish() + }; + if !query_string.is_empty() { + uri += "?"; + uri += &query_string; + } + + let uri = match Uri::from_str(&uri) { + Ok(uri) => uri, + Err(err) => return Err(ApiError(format!("Unable to build URI: {}", err))), + }; + + let mut request = match Request::builder() + .method("GET") + .uri(uri) + .body(Body::empty()) + { + Ok(req) => req, + Err(e) => return Err(ApiError(format!("Unable to create request: {}", e))), + }; + + let header = HeaderValue::from_str( + Has::::get(context) + .0 + .clone() + .to_string() + .as_str(), + ); + request.headers_mut().insert( + HeaderName::from_static("x-span-id"), + match header { + Ok(h) => h, + Err(e) => { + return Err(ApiError(format!( + "Unable to create X-Span ID header value: {}", + e + ))) + } + }, + ); + + let mut response = client_service + .call((request, context.clone())) + .map_err(|e| ApiError(format!("No response received: {}", e))) + .await?; + + match response.status().as_u16() { + 200 => { + let body = response.into_body(); + let body = body + .to_raw() + .map_err(|e| ApiError(format!("Failed to read response: {}", e))) + .await?; + let body = str::from_utf8(&body) + .map_err(|e| ApiError(format!("Response was not valid UTF8: {}", e)))?; + let body = serde_json::from_str::(body)?; + Ok(LookupEditorResponse::Found(body)) + } + 400 => { + let body = response.into_body(); + let body = body + .to_raw() + .map_err(|e| ApiError(format!("Failed to read response: {}", e))) + .await?; + let body = str::from_utf8(&body) + .map_err(|e| ApiError(format!("Response was not valid UTF8: {}", e)))?; + let body = serde_json::from_str::(body)?; + Ok(LookupEditorResponse::BadRequest(body)) + } + 404 => { + let body = response.into_body(); + let body = body + .to_raw() + .map_err(|e| ApiError(format!("Failed to read response: {}", e))) + .await?; + let body = str::from_utf8(&body) + .map_err(|e| ApiError(format!("Response was not valid UTF8: {}", e)))?; + let body = serde_json::from_str::(body)?; + Ok(LookupEditorResponse::NotFound(body)) + } + 500 => { + let body = response.into_body(); + let body = body + .to_raw() + .map_err(|e| ApiError(format!("Failed to read response: {}", e))) + .await?; + let body = str::from_utf8(&body) + .map_err(|e| ApiError(format!("Response was not valid UTF8: {}", e)))?; + let body = serde_json::from_str::(body)?; + Ok(LookupEditorResponse::GenericError(body)) + } + code => { + let headers = response.headers().clone(); + let body = response.into_body().take(100).to_raw().await; + Err(ApiError(format!( + "Unexpected response code {}:\n{:?}\n\n{}", + code, + headers, + match body { + Ok(body) => match String::from_utf8(body) { + Ok(body) => body, + Err(e) => format!("", e), + }, + Err(e) => format!("", e), + } + ))) + } + } + } + async fn lookup_file( &self, param_md5: Option, @@ -14013,6 +14149,7 @@ where param_doaj: Option, param_dblp: Option, param_oai: Option, + param_hdl: Option, param_expand: Option, param_hide: Option, context: &C, @@ -14062,6 +14199,9 @@ where if let Some(param_oai) = param_oai { query_string.append_pair("oai", ¶m_oai.to_string()); } + if let Some(param_hdl) = param_hdl { + query_string.append_pair("hdl", ¶m_hdl.to_string()); + } if let Some(param_expand) = param_expand { query_string.append_pair("expand", ¶m_expand.to_string()); } diff --git a/fatcat-openapi/src/lib.rs b/fatcat-openapi/src/lib.rs index ba49f27..8dd8e15 100644 --- a/fatcat-openapi/src/lib.rs +++ b/fatcat-openapi/src/lib.rs @@ -17,7 +17,7 @@ use swagger::{ApiError, ContextWrapper}; type ServiceError = Box; pub const BASE_PATH: &'static str = "/v0"; -pub const API_VERSION: &'static str = "0.3.3"; +pub const API_VERSION: &'static str = "0.4.0"; #[derive(Debug, PartialEq)] #[must_use] @@ -1361,6 +1361,19 @@ pub enum LookupCreatorResponse { GenericError(models::ErrorResponse), } +#[derive(Debug, PartialEq)] +#[must_use] +pub enum LookupEditorResponse { + /// Found + Found(models::Editor), + /// Bad Request + BadRequest(models::ErrorResponse), + /// Not Found + NotFound(models::ErrorResponse), + /// Generic Error + GenericError(models::ErrorResponse), +} + #[derive(Debug, PartialEq)] #[must_use] pub enum LookupFileResponse { @@ -2145,6 +2158,9 @@ pub trait Api { async fn lookup_container( &self, issnl: Option, + issne: Option, + issnp: Option, + issn: Option, wikidata_qid: Option, expand: Option, hide: Option, @@ -2160,6 +2176,12 @@ pub trait Api { context: &C, ) -> Result; + async fn lookup_editor( + &self, + username: Option, + context: &C, + ) -> Result; + async fn lookup_file( &self, md5: Option, @@ -2185,6 +2207,7 @@ pub trait Api { doaj: Option, dblp: Option, oai: Option, + hdl: Option, expand: Option, hide: Option, context: &C, @@ -2721,6 +2744,9 @@ pub trait ApiNoContext { async fn lookup_container( &self, issnl: Option, + issne: Option, + issnp: Option, + issn: Option, wikidata_qid: Option, expand: Option, hide: Option, @@ -2734,6 +2760,11 @@ pub trait ApiNoContext { hide: Option, ) -> Result; + async fn lookup_editor( + &self, + username: Option, + ) -> Result; + async fn lookup_file( &self, md5: Option, @@ -2758,6 +2789,7 @@ pub trait ApiNoContext { doaj: Option, dblp: Option, oai: Option, + hdl: Option, expand: Option, hide: Option, ) -> Result; @@ -3637,13 +3669,25 @@ impl + Send + Sync, C: Clone + Send + Sync> ApiNoContext for Contex async fn lookup_container( &self, issnl: Option, + issne: Option, + issnp: Option, + issn: Option, wikidata_qid: Option, expand: Option, hide: Option, ) -> Result { let context = self.context().clone(); self.api() - .lookup_container(issnl, wikidata_qid, expand, hide, &context) + .lookup_container( + issnl, + issne, + issnp, + issn, + wikidata_qid, + expand, + hide, + &context, + ) .await } @@ -3660,6 +3704,14 @@ impl + Send + Sync, C: Clone + Send + Sync> ApiNoContext for Contex .await } + async fn lookup_editor( + &self, + username: Option, + ) -> Result { + let context = self.context().clone(); + self.api().lookup_editor(username, &context).await + } + async fn lookup_file( &self, md5: Option, @@ -3689,6 +3741,7 @@ impl + Send + Sync, C: Clone + Send + Sync> ApiNoContext for Contex doaj: Option, dblp: Option, oai: Option, + hdl: Option, expand: Option, hide: Option, ) -> Result { @@ -3708,6 +3761,7 @@ impl + Send + Sync, C: Clone + Send + Sync> ApiNoContext for Contex doaj, dblp, oai, + hdl, expand, hide, &context, diff --git a/fatcat-openapi/src/models.rs b/fatcat-openapi/src/models.rs index d642c62..e418053 100644 --- a/fatcat-openapi/src/models.rs +++ b/fatcat-openapi/src/models.rs @@ -891,6 +891,11 @@ pub struct ContainerEntity { #[serde(skip_serializing_if = "Option::is_none")] pub container_type: Option, + /// Whether the container is active, discontinued, etc + #[serde(rename = "publication_status")] + #[serde(skip_serializing_if = "Option::is_none")] + pub publication_status: Option, + /// Name of the organization or entity responsible for publication. Not the complete imprint/brand. #[serde(rename = "publisher")] #[serde(skip_serializing_if = "Option::is_none")] @@ -901,6 +906,16 @@ pub struct ContainerEntity { #[serde(skip_serializing_if = "Option::is_none")] pub issnl: Option, + /// Electronic ISSN number (ISSN-E). Should be valid and registered with issn.org + #[serde(rename = "issne")] + #[serde(skip_serializing_if = "Option::is_none")] + pub issne: Option, + + /// Print ISSN number (ISSN-P). Should be valid and registered with issn.org + #[serde(rename = "issnp")] + #[serde(skip_serializing_if = "Option::is_none")] + pub issnp: Option, + #[serde(rename = "wikidata_qid")] #[serde(skip_serializing_if = "Option::is_none")] pub wikidata_qid: Option, @@ -917,8 +932,11 @@ impl ContainerEntity { edit_extra: None, name: None, container_type: None, + publication_status: None, publisher: None, issnl: None, + issne: None, + issnp: None, wikidata_qid: None, } } @@ -967,6 +985,11 @@ impl std::string::ToString for ContainerEntity { params.push(container_type.to_string()); } + if let Some(ref publication_status) = self.publication_status { + params.push("publication_status".to_string()); + params.push(publication_status.to_string()); + } + if let Some(ref publisher) = self.publisher { params.push("publisher".to_string()); params.push(publisher.to_string()); @@ -977,6 +1000,16 @@ impl std::string::ToString for ContainerEntity { params.push(issnl.to_string()); } + if let Some(ref issne) = self.issne { + params.push("issne".to_string()); + params.push(issne.to_string()); + } + + if let Some(ref issnp) = self.issnp { + params.push("issnp".to_string()); + params.push(issnp.to_string()); + } + if let Some(ref wikidata_qid) = self.wikidata_qid { params.push("wikidata_qid".to_string()); params.push(wikidata_qid.to_string()); @@ -1004,8 +1037,11 @@ impl std::str::FromStr for ContainerEntity { pub edit_extra: Vec>, pub name: Vec, pub container_type: Vec, + pub publication_status: Vec, pub publisher: Vec, pub issnl: Vec, + pub issne: Vec, + pub issnp: Vec, pub wikidata_qid: Vec, } @@ -1057,12 +1093,21 @@ impl std::str::FromStr for ContainerEntity { "container_type" => intermediate_rep .container_type .push(String::from_str(val).map_err(|x| format!("{}", x))?), + "publication_status" => intermediate_rep + .publication_status + .push(String::from_str(val).map_err(|x| format!("{}", x))?), "publisher" => intermediate_rep .publisher .push(String::from_str(val).map_err(|x| format!("{}", x))?), "issnl" => intermediate_rep .issnl .push(String::from_str(val).map_err(|x| format!("{}", x))?), + "issne" => intermediate_rep + .issne + .push(String::from_str(val).map_err(|x| format!("{}", x))?), + "issnp" => intermediate_rep + .issnp + .push(String::from_str(val).map_err(|x| format!("{}", x))?), "wikidata_qid" => intermediate_rep .wikidata_qid .push(String::from_str(val).map_err(|x| format!("{}", x))?), @@ -1088,8 +1133,11 @@ impl std::str::FromStr for ContainerEntity { edit_extra: intermediate_rep.edit_extra.into_iter().next(), name: intermediate_rep.name.into_iter().next(), container_type: intermediate_rep.container_type.into_iter().next(), + publication_status: intermediate_rep.publication_status.into_iter().next(), publisher: intermediate_rep.publisher.into_iter().next(), issnl: intermediate_rep.issnl.into_iter().next(), + issne: intermediate_rep.issne.into_iter().next(), + issnp: intermediate_rep.issnp.into_iter().next(), wikidata_qid: intermediate_rep.wikidata_qid.into_iter().next(), }) } @@ -4156,7 +4204,11 @@ pub struct FilesetFile { #[serde(skip_serializing_if = "Option::is_none")] pub sha256: Option, - /// Free-form additional metadata about this specific file in the set. Eg, `mimetype`. See guide for nomative (but unenforced) schema fields. + #[serde(rename = "mimetype")] + #[serde(skip_serializing_if = "Option::is_none")] + pub mimetype: Option, + + /// Free-form additional metadata about this specific file in the set. Eg, `original_url`. See guide for normative (but unenforced) schema fields. #[serde(rename = "extra")] #[serde(skip_serializing_if = "Option::is_none")] pub extra: Option>, @@ -4170,6 +4222,7 @@ impl FilesetFile { md5: None, sha1: None, sha256: None, + mimetype: None, extra: None, } } @@ -4203,6 +4256,11 @@ impl std::string::ToString for FilesetFile { params.push(sha256.to_string()); } + if let Some(ref mimetype) = self.mimetype { + params.push("mimetype".to_string()); + params.push(mimetype.to_string()); + } + // Skipping extra in query parameter serialization // Skipping extra in query parameter serialization @@ -4225,6 +4283,7 @@ impl std::str::FromStr for FilesetFile { pub md5: Vec, pub sha1: Vec, pub sha256: Vec, + pub mimetype: Vec, pub extra: Vec>, } @@ -4261,6 +4320,9 @@ impl std::str::FromStr for FilesetFile { "sha256" => intermediate_rep .sha256 .push(String::from_str(val).map_err(|x| format!("{}", x))?), + "mimetype" => intermediate_rep + .mimetype + .push(String::from_str(val).map_err(|x| format!("{}", x))?), "extra" => { return std::result::Result::Err( "Parsing a container in this style is not supported in FilesetFile" @@ -4294,6 +4356,7 @@ impl std::str::FromStr for FilesetFile { md5: intermediate_rep.md5.into_iter().next(), sha1: intermediate_rep.sha1.into_iter().next(), sha256: intermediate_rep.sha256.into_iter().next(), + mimetype: intermediate_rep.mimetype.into_iter().next(), extra: intermediate_rep.extra.into_iter().next(), }) } @@ -5794,6 +5857,11 @@ pub struct ReleaseExtIds { #[serde(rename = "oai")] #[serde(skip_serializing_if = "Option::is_none")] pub oai: Option, + + /// Handle identifier. Do not put DOIs in this field + #[serde(rename = "hdl")] + #[serde(skip_serializing_if = "Option::is_none")] + pub hdl: Option, } impl ReleaseExtIds { @@ -5812,6 +5880,7 @@ impl ReleaseExtIds { doaj: None, dblp: None, oai: None, + hdl: None, } } } @@ -5888,6 +5957,11 @@ impl std::string::ToString for ReleaseExtIds { params.push(oai.to_string()); } + if let Some(ref hdl) = self.hdl { + params.push("hdl".to_string()); + params.push(hdl.to_string()); + } + params.join(",").to_string() } } @@ -5915,6 +5989,7 @@ impl std::str::FromStr for ReleaseExtIds { pub doaj: Vec, pub dblp: Vec, pub oai: Vec, + pub hdl: Vec, } let mut intermediate_rep = IntermediateRep::default(); @@ -5974,6 +6049,9 @@ impl std::str::FromStr for ReleaseExtIds { "oai" => intermediate_rep .oai .push(String::from_str(val).map_err(|x| format!("{}", x))?), + "hdl" => intermediate_rep + .hdl + .push(String::from_str(val).map_err(|x| format!("{}", x))?), _ => { return std::result::Result::Err( "Unexpected key while parsing ReleaseExtIds".to_string(), @@ -6001,6 +6079,7 @@ impl std::str::FromStr for ReleaseExtIds { doaj: intermediate_rep.doaj.into_iter().next(), dblp: intermediate_rep.dblp.into_iter().next(), oai: intermediate_rep.oai.into_iter().next(), + hdl: intermediate_rep.hdl.into_iter().next(), }) } } diff --git a/fatcat-openapi/src/server/mod.rs b/fatcat-openapi/src/server/mod.rs index ac07c6e..251c678 100644 --- a/fatcat-openapi/src/server/mod.rs +++ b/fatcat-openapi/src/server/mod.rs @@ -47,10 +47,10 @@ use crate::{ GetWebcaptureEditResponse, GetWebcaptureHistoryResponse, GetWebcaptureRedirectsResponse, GetWebcaptureResponse, GetWebcaptureRevisionResponse, GetWorkEditResponse, GetWorkHistoryResponse, GetWorkRedirectsResponse, GetWorkReleasesResponse, GetWorkResponse, - GetWorkRevisionResponse, LookupContainerResponse, LookupCreatorResponse, LookupFileResponse, - LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, UpdateEditgroupResponse, - UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, UpdateReleaseResponse, - UpdateWebcaptureResponse, UpdateWorkResponse, + GetWorkRevisionResponse, LookupContainerResponse, LookupCreatorResponse, LookupEditorResponse, + LookupFileResponse, LookupReleaseResponse, UpdateContainerResponse, UpdateCreatorResponse, + UpdateEditgroupResponse, UpdateEditorResponse, UpdateFileResponse, UpdateFilesetResponse, + UpdateReleaseResponse, UpdateWebcaptureResponse, UpdateWorkResponse, }; mod paths { @@ -110,6 +110,7 @@ mod paths { r"^/v0/editgroup/(?P[^/?#]*)/work$", r"^/v0/editgroup/(?P[^/?#]*)/work/edit/(?P[^/?#]*)$", r"^/v0/editgroup/(?P[^/?#]*)/work/(?P[^/?#]*)$", + r"^/v0/editor/lookup$", r"^/v0/editor/(?P[^/?#]*)$", r"^/v0/editor/(?P[^/?#]*)/annotations$", r"^/v0/editor/(?P[^/?#]*)/editgroups$", @@ -413,195 +414,196 @@ mod paths { regex::Regex::new(r"^/v0/editgroup/(?P[^/?#]*)/work/(?P[^/?#]*)$") .expect("Unable to create regex for EDITGROUP_EDITGROUP_ID_WORK_IDENT"); } - pub(crate) static ID_EDITOR_EDITOR_ID: usize = 52; + pub(crate) static ID_EDITOR_LOOKUP: usize = 52; + pub(crate) static ID_EDITOR_EDITOR_ID: usize = 53; lazy_static! { pub static ref REGEX_EDITOR_EDITOR_ID: regex::Regex = regex::Regex::new(r"^/v0/editor/(?P[^/?#]*)$") .expect("Unable to create regex for EDITOR_EDITOR_ID"); } - pub(crate) static ID_EDITOR_EDITOR_ID_ANNOTATIONS: usize = 53; + pub(crate) static ID_EDITOR_EDITOR_ID_ANNOTATIONS: usize = 54; lazy_static! { pub static ref REGEX_EDITOR_EDITOR_ID_ANNOTATIONS: regex::Regex = regex::Regex::new(r"^/v0/editor/(?P[^/?#]*)/annotations$") .expect("Unable to create regex for EDITOR_EDITOR_ID_ANNOTATIONS"); } - pub(crate) static ID_EDITOR_EDITOR_ID_EDITGROUPS: usize = 54; + pub(crate) static ID_EDITOR_EDITOR_ID_EDITGROUPS: usize = 55; lazy_static! { pub static ref REGEX_EDITOR_EDITOR_ID_EDITGROUPS: regex::Regex = regex::Regex::new(r"^/v0/editor/(?P[^/?#]*)/editgroups$") .expect("Unable to create regex for EDITOR_EDITOR_ID_EDITGROUPS"); } - pub(crate) static ID_FILE_EDIT_EDIT_ID: usize = 55; + pub(crate) static ID_FILE_EDIT_EDIT_ID: usize = 56; lazy_static! { pub static ref REGEX_FILE_EDIT_EDIT_ID: regex::Regex = regex::Regex::new(r"^/v0/file/edit/(?P[^/?#]*)$") .expect("Unable to create regex for FILE_EDIT_EDIT_ID"); } - pub(crate) static ID_FILE_LOOKUP: usize = 56; - pub(crate) static ID_FILE_REV_REV_ID: usize = 57; + pub(crate) static ID_FILE_LOOKUP: usize = 57; + pub(crate) static ID_FILE_REV_REV_ID: usize = 58; lazy_static! { pub static ref REGEX_FILE_REV_REV_ID: regex::Regex = regex::Regex::new(r"^/v0/file/rev/(?P[^/?#]*)$") .expect("Unable to create regex for FILE_REV_REV_ID"); } - pub(crate) static ID_FILE_IDENT: usize = 58; + pub(crate) static ID_FILE_IDENT: usize = 59; lazy_static! { pub static ref REGEX_FILE_IDENT: regex::Regex = regex::Regex::new(r"^/v0/file/(?P[^/?#]*)$") .expect("Unable to create regex for FILE_IDENT"); } - pub(crate) static ID_FILE_IDENT_HISTORY: usize = 59; + pub(crate) static ID_FILE_IDENT_HISTORY: usize = 60; lazy_static! { pub static ref REGEX_FILE_IDENT_HISTORY: regex::Regex = regex::Regex::new(r"^/v0/file/(?P[^/?#]*)/history$") .expect("Unable to create regex for FILE_IDENT_HISTORY"); } - pub(crate) static ID_FILE_IDENT_REDIRECTS: usize = 60; + pub(crate) static ID_FILE_IDENT_REDIRECTS: usize = 61; lazy_static! { pub static ref REGEX_FILE_IDENT_REDIRECTS: regex::Regex = regex::Regex::new(r"^/v0/file/(?P[^/?#]*)/redirects$") .expect("Unable to create regex for FILE_IDENT_REDIRECTS"); } - pub(crate) static ID_FILESET_EDIT_EDIT_ID: usize = 61; + pub(crate) static ID_FILESET_EDIT_EDIT_ID: usize = 62; lazy_static! { pub static ref REGEX_FILESET_EDIT_EDIT_ID: regex::Regex = regex::Regex::new(r"^/v0/fileset/edit/(?P[^/?#]*)$") .expect("Unable to create regex for FILESET_EDIT_EDIT_ID"); } - pub(crate) static ID_FILESET_REV_REV_ID: usize = 62; + pub(crate) static ID_FILESET_REV_REV_ID: usize = 63; lazy_static! { pub static ref REGEX_FILESET_REV_REV_ID: regex::Regex = regex::Regex::new(r"^/v0/fileset/rev/(?P[^/?#]*)$") .expect("Unable to create regex for FILESET_REV_REV_ID"); } - pub(crate) static ID_FILESET_IDENT: usize = 63; + pub(crate) static ID_FILESET_IDENT: usize = 64; lazy_static! { pub static ref REGEX_FILESET_IDENT: regex::Regex = regex::Regex::new(r"^/v0/fileset/(?P[^/?#]*)$") .expect("Unable to create regex for FILESET_IDENT"); } - pub(crate) static ID_FILESET_IDENT_HISTORY: usize = 64; + pub(crate) static ID_FILESET_IDENT_HISTORY: usize = 65; lazy_static! { pub static ref REGEX_FILESET_IDENT_HISTORY: regex::Regex = regex::Regex::new(r"^/v0/fileset/(?P[^/?#]*)/history$") .expect("Unable to create regex for FILESET_IDENT_HISTORY"); } - pub(crate) static ID_FILESET_IDENT_REDIRECTS: usize = 65; + pub(crate) static ID_FILESET_IDENT_REDIRECTS: usize = 66; lazy_static! { pub static ref REGEX_FILESET_IDENT_REDIRECTS: regex::Regex = regex::Regex::new(r"^/v0/fileset/(?P[^/?#]*)/redirects$") .expect("Unable to create regex for FILESET_IDENT_REDIRECTS"); } - pub(crate) static ID_RELEASE_EDIT_EDIT_ID: usize = 66; + pub(crate) static ID_RELEASE_EDIT_EDIT_ID: usize = 67; lazy_static! { pub static ref REGEX_RELEASE_EDIT_EDIT_ID: regex::Regex = regex::Regex::new(r"^/v0/release/edit/(?P[^/?#]*)$") .expect("Unable to create regex for RELEASE_EDIT_EDIT_ID"); } - pub(crate) static ID_RELEASE_LOOKUP: usize = 67; - pub(crate) static ID_RELEASE_REV_REV_ID: usize = 68; + pub(crate) static ID_RELEASE_LOOKUP: usize = 68; + pub(crate) static ID_RELEASE_REV_REV_ID: usize = 69; lazy_static! { pub static ref REGEX_RELEASE_REV_REV_ID: regex::Regex = regex::Regex::new(r"^/v0/release/rev/(?P[^/?#]*)$") .expect("Unable to create regex for RELEASE_REV_REV_ID"); } - pub(crate) static ID_RELEASE_IDENT: usize = 69; + pub(crate) static ID_RELEASE_IDENT: usize = 70; lazy_static! { pub static ref REGEX_RELEASE_IDENT: regex::Regex = regex::Regex::new(r"^/v0/release/(?P[^/?#]*)$") .expect("Unable to create regex for RELEASE_IDENT"); } - pub(crate) static ID_RELEASE_IDENT_FILES: usize = 70; + pub(crate) static ID_RELEASE_IDENT_FILES: usize = 71; lazy_static! { pub static ref REGEX_RELEASE_IDENT_FILES: regex::Regex = regex::Regex::new(r"^/v0/release/(?P[^/?#]*)/files$") .expect("Unable to create regex for RELEASE_IDENT_FILES"); } - pub(crate) static ID_RELEASE_IDENT_FILESETS: usize = 71; + pub(crate) static ID_RELEASE_IDENT_FILESETS: usize = 72; lazy_static! { pub static ref REGEX_RELEASE_IDENT_FILESETS: regex::Regex = regex::Regex::new(r"^/v0/release/(?P[^/?#]*)/filesets$") .expect("Unable to create regex for RELEASE_IDENT_FILESETS"); } - pub(crate) static ID_RELEASE_IDENT_HISTORY: usize = 72; + pub(crate) static ID_RELEASE_IDENT_HISTORY: usize = 73; lazy_static! { pub static ref REGEX_RELEASE_IDENT_HISTORY: regex::Regex = regex::Regex::new(r"^/v0/release/(?P[^/?#]*)/history$") .expect("Unable to create regex for RELEASE_IDENT_HISTORY"); } - pub(crate) static ID_RELEASE_IDENT_REDIRECTS: usize = 73; + pub(crate) static ID_RELEASE_IDENT_REDIRECTS: usize = 74; lazy_static! { pub static ref REGEX_RELEASE_IDENT_REDIRECTS: regex::Regex = regex::Regex::new(r"^/v0/release/(?P[^/?#]*)/redirects$") .expect("Unable to create regex for RELEASE_IDENT_REDIRECTS"); } - pub(crate) static ID_RELEASE_IDENT_WEBCAPTURES: usize = 74; + pub(crate) static ID_RELEASE_IDENT_WEBCAPTURES: usize = 75; lazy_static! { pub static ref REGEX_RELEASE_IDENT_WEBCAPTURES: regex::Regex = regex::Regex::new(r"^/v0/release/(?P[^/?#]*)/webcaptures$") .expect("Unable to create regex for RELEASE_IDENT_WEBCAPTURES"); } - pub(crate) static ID_WEBCAPTURE_EDIT_EDIT_ID: usize = 75; + pub(crate) static ID_WEBCAPTURE_EDIT_EDIT_ID: usize = 76; lazy_static! { pub static ref REGEX_WEBCAPTURE_EDIT_EDIT_ID: regex::Regex = regex::Regex::new(r"^/v0/webcapture/edit/(?P[^/?#]*)$") .expect("Unable to create regex for WEBCAPTURE_EDIT_EDIT_ID"); } - pub(crate) static ID_WEBCAPTURE_REV_REV_ID: usize = 76; + pub(crate) static ID_WEBCAPTURE_REV_REV_ID: usize = 77; lazy_static! { pub static ref REGEX_WEBCAPTURE_REV_REV_ID: regex::Regex = regex::Regex::new(r"^/v0/webcapture/rev/(?P[^/?#]*)$") .expect("Unable to create regex for WEBCAPTURE_REV_REV_ID"); } - pub(crate) static ID_WEBCAPTURE_IDENT: usize = 77; + pub(crate) static ID_WEBCAPTURE_IDENT: usize = 78; lazy_static! { pub static ref REGEX_WEBCAPTURE_IDENT: regex::Regex = regex::Regex::new(r"^/v0/webcapture/(?P[^/?#]*)$") .expect("Unable to create regex for WEBCAPTURE_IDENT"); } - pub(crate) static ID_WEBCAPTURE_IDENT_HISTORY: usize = 78; + pub(crate) static ID_WEBCAPTURE_IDENT_HISTORY: usize = 79; lazy_static! { pub static ref REGEX_WEBCAPTURE_IDENT_HISTORY: regex::Regex = regex::Regex::new(r"^/v0/webcapture/(?P[^/?#]*)/history$") .expect("Unable to create regex for WEBCAPTURE_IDENT_HISTORY"); } - pub(crate) static ID_WEBCAPTURE_IDENT_REDIRECTS: usize = 79; + pub(crate) static ID_WEBCAPTURE_IDENT_REDIRECTS: usize = 80; lazy_static! { pub static ref REGEX_WEBCAPTURE_IDENT_REDIRECTS: regex::Regex = regex::Regex::new(r"^/v0/webcapture/(?P[^/?#]*)/redirects$") .expect("Unable to create regex for WEBCAPTURE_IDENT_REDIRECTS"); } - pub(crate) static ID_WORK_EDIT_EDIT_ID: usize = 80; + pub(crate) static ID_WORK_EDIT_EDIT_ID: usize = 81; lazy_static! { pub static ref REGEX_WORK_EDIT_EDIT_ID: regex::Regex = regex::Regex::new(r"^/v0/work/edit/(?P[^/?#]*)$") .expect("Unable to create regex for WORK_EDIT_EDIT_ID"); } - pub(crate) static ID_WORK_REV_REV_ID: usize = 81; + pub(crate) static ID_WORK_REV_REV_ID: usize = 82; lazy_static! { pub static ref REGEX_WORK_REV_REV_ID: regex::Regex = regex::Regex::new(r"^/v0/work/rev/(?P[^/?#]*)$") .expect("Unable to create regex for WORK_REV_REV_ID"); } - pub(crate) static ID_WORK_IDENT: usize = 82; + pub(crate) static ID_WORK_IDENT: usize = 83; lazy_static! { pub static ref REGEX_WORK_IDENT: regex::Regex = regex::Regex::new(r"^/v0/work/(?P[^/?#]*)$") .expect("Unable to create regex for WORK_IDENT"); } - pub(crate) static ID_WORK_IDENT_HISTORY: usize = 83; + pub(crate) static ID_WORK_IDENT_HISTORY: usize = 84; lazy_static! { pub static ref REGEX_WORK_IDENT_HISTORY: regex::Regex = regex::Regex::new(r"^/v0/work/(?P[^/?#]*)/history$") .expect("Unable to create regex for WORK_IDENT_HISTORY"); } - pub(crate) static ID_WORK_IDENT_REDIRECTS: usize = 84; + pub(crate) static ID_WORK_IDENT_REDIRECTS: usize = 85; lazy_static! { pub static ref REGEX_WORK_IDENT_REDIRECTS: regex::Regex = regex::Regex::new(r"^/v0/work/(?P[^/?#]*)/redirects$") .expect("Unable to create regex for WORK_IDENT_REDIRECTS"); } - pub(crate) static ID_WORK_IDENT_RELEASES: usize = 85; + pub(crate) static ID_WORK_IDENT_RELEASES: usize = 86; lazy_static! { pub static ref REGEX_WORK_IDENT_RELEASES: regex::Regex = regex::Regex::new(r"^/v0/work/(?P[^/?#]*)/releases$") @@ -12618,6 +12620,60 @@ where } None => None, }; + let param_issne = query_params + .iter() + .filter(|e| e.0 == "issne") + .map(|e| e.1.to_owned()) + .nth(0); + let param_issne = match param_issne { + Some(param_issne) => { + let param_issne = ::from_str(¶m_issne); + match param_issne { + Ok(param_issne) => Some(param_issne), + Err(e) => return Ok(Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(format!("Couldn't parse query parameter issne - doesn't match schema: {}", e))) + .expect("Unable to create Bad Request response for invalid query parameter issne")), + } + } + None => None, + }; + let param_issnp = query_params + .iter() + .filter(|e| e.0 == "issnp") + .map(|e| e.1.to_owned()) + .nth(0); + let param_issnp = match param_issnp { + Some(param_issnp) => { + let param_issnp = ::from_str(¶m_issnp); + match param_issnp { + Ok(param_issnp) => Some(param_issnp), + Err(e) => return Ok(Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(format!("Couldn't parse query parameter issnp - doesn't match schema: {}", e))) + .expect("Unable to create Bad Request response for invalid query parameter issnp")), + } + } + None => None, + }; + 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) => { + let param_issn = ::from_str(¶m_issn); + match param_issn { + Ok(param_issn) => Some(param_issn), + Err(e) => return Ok(Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(format!("Couldn't parse query parameter issn - doesn't match schema: {}", e))) + .expect("Unable to create Bad Request response for invalid query parameter issn")), + } + } + None => None, + }; let param_wikidata_qid = query_params .iter() .filter(|e| e.0 == "wikidata_qid") @@ -12678,6 +12734,9 @@ where let result = api_impl .lookup_container( param_issnl, + param_issne, + param_issnp, + param_issn, param_wikidata_qid, param_expand, param_hide, @@ -12918,6 +12977,105 @@ where Ok(response) } + // LookupEditor - GET /editor/lookup + &hyper::Method::GET if path.matched(paths::ID_EDITOR_LOOKUP) => { + // 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::>(); + let param_username = query_params + .iter() + .filter(|e| e.0 == "username") + .map(|e| e.1.to_owned()) + .nth(0); + let param_username = match param_username { + Some(param_username) => { + let param_username = + ::from_str(¶m_username); + match param_username { + Ok(param_username) => Some(param_username), + Err(e) => return Ok(Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(format!("Couldn't parse query parameter username - doesn't match schema: {}", e))) + .expect("Unable to create Bad Request response for invalid query parameter username")), + } + } + None => None, + }; + + let result = api_impl.lookup_editor(param_username, &context).await; + let mut response = Response::new(Body::empty()); + response.headers_mut().insert( + HeaderName::from_static("x-span-id"), + HeaderValue::from_str( + (&context as &dyn Has) + .get() + .0 + .clone() + .to_string() + .as_str(), + ) + .expect("Unable to create X-Span-ID header value"), + ); + + match result { + Ok(rsp) => match rsp { + LookupEditorResponse::Found(body) => { + *response.status_mut() = StatusCode::from_u16(200) + .expect("Unable to turn 200 into a StatusCode"); + response.headers_mut().insert( + CONTENT_TYPE, + HeaderValue::from_str("application/json") + .expect("Unable to create Content-Type header for LOOKUP_EDITOR_FOUND")); + let body = serde_json::to_string(&body) + .expect("impossible to fail to serialize"); + *response.body_mut() = Body::from(body); + } + LookupEditorResponse::BadRequest(body) => { + *response.status_mut() = StatusCode::from_u16(400) + .expect("Unable to turn 400 into a StatusCode"); + response.headers_mut().insert( + CONTENT_TYPE, + HeaderValue::from_str("application/json") + .expect("Unable to create Content-Type header for LOOKUP_EDITOR_BAD_REQUEST")); + let body = serde_json::to_string(&body) + .expect("impossible to fail to serialize"); + *response.body_mut() = Body::from(body); + } + LookupEditorResponse::NotFound(body) => { + *response.status_mut() = StatusCode::from_u16(404) + .expect("Unable to turn 404 into a StatusCode"); + response.headers_mut().insert( + CONTENT_TYPE, + HeaderValue::from_str("application/json") + .expect("Unable to create Content-Type header for LOOKUP_EDITOR_NOT_FOUND")); + let body = serde_json::to_string(&body) + .expect("impossible to fail to serialize"); + *response.body_mut() = Body::from(body); + } + LookupEditorResponse::GenericError(body) => { + *response.status_mut() = StatusCode::from_u16(500) + .expect("Unable to turn 500 into a StatusCode"); + response.headers_mut().insert( + CONTENT_TYPE, + HeaderValue::from_str("application/json") + .expect("Unable to create Content-Type header for LOOKUP_EDITOR_GENERIC_ERROR")); + let body = serde_json::to_string(&body) + .expect("impossible to fail to serialize"); + *response.body_mut() = Body::from(body); + } + }, + Err(_) => { + // Application code returned an error. This should not happen, as the implementation should + // return a valid response. + *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR; + *response.body_mut() = Body::from("An internal error occurred"); + } + } + + Ok(response) + } + // LookupFile - GET /file/lookup &hyper::Method::GET if path.matched(paths::ID_FILE_LOOKUP) => { // Query parameters (note that non-required or collection query parameters will ignore garbage values, rather than causing a 400 response) @@ -13341,6 +13499,24 @@ where } None => None, }; + let param_hdl = query_params + .iter() + .filter(|e| e.0 == "hdl") + .map(|e| e.1.to_owned()) + .nth(0); + let param_hdl = match param_hdl { + Some(param_hdl) => { + let param_hdl = ::from_str(¶m_hdl); + match param_hdl { + Ok(param_hdl) => Some(param_hdl), + Err(e) => return Ok(Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(format!("Couldn't parse query parameter hdl - doesn't match schema: {}", e))) + .expect("Unable to create Bad Request response for invalid query parameter hdl")), + } + } + None => None, + }; let param_expand = query_params .iter() .filter(|e| e.0 == "expand") @@ -13394,6 +13570,7 @@ where param_doaj, param_dblp, param_oai, + param_hdl, param_expand, param_hide, &context, @@ -15432,6 +15609,7 @@ where _ if path.matched(paths::ID_EDITGROUP_EDITGROUP_ID_WORK_IDENT) => { method_not_allowed() } + _ if path.matched(paths::ID_EDITOR_LOOKUP) => method_not_allowed(), _ if path.matched(paths::ID_EDITOR_EDITOR_ID) => method_not_allowed(), _ if path.matched(paths::ID_EDITOR_EDITOR_ID_ANNOTATIONS) => method_not_allowed(), _ if path.matched(paths::ID_EDITOR_EDITOR_ID_EDITGROUPS) => method_not_allowed(), @@ -15808,6 +15986,8 @@ impl RequestParser for ApiRequestParser { } // LookupCreator - GET /creator/lookup &hyper::Method::GET if path.matched(paths::ID_CREATOR_LOOKUP) => Ok("LookupCreator"), + // LookupEditor - GET /editor/lookup + &hyper::Method::GET if path.matched(paths::ID_EDITOR_LOOKUP) => Ok("LookupEditor"), // LookupFile - GET /file/lookup &hyper::Method::GET if path.matched(paths::ID_FILE_LOOKUP) => Ok("LookupFile"), // LookupRelease - GET /release/lookup -- cgit v1.2.3