diff options
author | Bryan Newbold <bnewbold@archive.org> | 2021-02-09 18:57:00 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@archive.org> | 2021-02-09 18:57:00 -0800 |
commit | 19c582a3cf1c42e9c75170650ccd141eda903479 (patch) | |
tree | 0738781689e4c12308016f184cb6eb02af1716a6 /rust/fatcat-openapi/src/models.rs | |
parent | bab3fb9fdcc921e1bb8a81e0f2b4e12558d2dde7 (diff) | |
download | fatcat-cli-19c582a3cf1c42e9c75170650ccd141eda903479.tar.gz fatcat-cli-19c582a3cf1c42e9c75170650ccd141eda903479.zip |
move source code to top-level directory
Diffstat (limited to 'rust/fatcat-openapi/src/models.rs')
-rw-r--r-- | rust/fatcat-openapi/src/models.rs | 7621 |
1 files changed, 0 insertions, 7621 deletions
diff --git a/rust/fatcat-openapi/src/models.rs b/rust/fatcat-openapi/src/models.rs deleted file mode 100644 index d642c62..0000000 --- a/rust/fatcat-openapi/src/models.rs +++ /dev/null @@ -1,7621 +0,0 @@ -#![allow(unused_qualifications)] - -#[cfg(any(feature = "client", feature = "server"))] -use crate::header; -use crate::models; - -// Methods for converting between header::IntoHeaderValue<AuthOidc> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<AuthOidc>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<AuthOidc>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for AuthOidc - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<AuthOidc> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <AuthOidc as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into AuthOidc - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct AuthOidc { - /// Fatcat-specific short name (slug) for remote service being used for authentication. - #[serde(rename = "provider")] - pub provider: String, - - /// `SUB` from OIDC protocol. Usually a URL. - #[serde(rename = "sub")] - pub sub: String, - - /// `ISS` from OIDC protocol. Usually a stable account username, number, or identifier. - #[serde(rename = "iss")] - pub iss: String, - - /// What it sounds like; returned by OIDC, and used as a hint when creating new editor accounts. Fatcat usernames are usually this string with the `provider` slug as a suffix, though some munging may occur. - #[serde(rename = "preferred_username")] - pub preferred_username: String, -} - -impl AuthOidc { - pub fn new(provider: String, sub: String, iss: String, preferred_username: String) -> AuthOidc { - AuthOidc { - provider: provider, - sub: sub, - iss: iss, - preferred_username: preferred_username, - } - } -} - -/// Converts the AuthOidc value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for AuthOidc { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("provider".to_string()); - params.push(self.provider.to_string()); - - params.push("sub".to_string()); - params.push(self.sub.to_string()); - - params.push("iss".to_string()); - params.push(self.iss.to_string()); - - params.push("preferred_username".to_string()); - params.push(self.preferred_username.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a AuthOidc value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for AuthOidc { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub provider: Vec<String>, - pub sub: Vec<String>, - pub iss: Vec<String>, - pub preferred_username: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing AuthOidc".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "provider" => intermediate_rep - .provider - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "sub" => intermediate_rep - .sub - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "iss" => intermediate_rep - .iss - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "preferred_username" => intermediate_rep - .preferred_username - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing AuthOidc".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(AuthOidc { - provider: intermediate_rep - .provider - .into_iter() - .next() - .ok_or("provider missing in AuthOidc".to_string())?, - sub: intermediate_rep - .sub - .into_iter() - .next() - .ok_or("sub missing in AuthOidc".to_string())?, - iss: intermediate_rep - .iss - .into_iter() - .next() - .ok_or("iss missing in AuthOidc".to_string())?, - preferred_username: intermediate_rep - .preferred_username - .into_iter() - .next() - .ok_or("preferred_username missing in AuthOidc".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<AuthOidcResult> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<AuthOidcResult>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<AuthOidcResult>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for AuthOidcResult - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<AuthOidcResult> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <AuthOidcResult as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into AuthOidcResult - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct AuthOidcResult { - #[serde(rename = "editor")] - pub editor: models::Editor, - - #[serde(rename = "token")] - pub token: String, -} - -impl AuthOidcResult { - pub fn new(editor: models::Editor, token: String) -> AuthOidcResult { - AuthOidcResult { - editor: editor, - token: token, - } - } -} - -/// Converts the AuthOidcResult value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for AuthOidcResult { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editor in query parameter serialization - - params.push("token".to_string()); - params.push(self.token.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a AuthOidcResult value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for AuthOidcResult { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editor: Vec<models::Editor>, - pub token: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing AuthOidcResult".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editor" => intermediate_rep - .editor - .push(models::Editor::from_str(val).map_err(|x| format!("{}", x))?), - "token" => intermediate_rep - .token - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing AuthOidcResult".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(AuthOidcResult { - editor: intermediate_rep - .editor - .into_iter() - .next() - .ok_or("editor missing in AuthOidcResult".to_string())?, - token: intermediate_rep - .token - .into_iter() - .next() - .ok_or("token missing in AuthOidcResult".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<AuthTokenResult> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<AuthTokenResult>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<AuthTokenResult>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for AuthTokenResult - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<AuthTokenResult> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <AuthTokenResult as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into AuthTokenResult - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct AuthTokenResult { - #[serde(rename = "token")] - pub token: String, -} - -impl AuthTokenResult { - pub fn new(token: String) -> AuthTokenResult { - AuthTokenResult { token: token } - } -} - -/// Converts the AuthTokenResult value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for AuthTokenResult { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("token".to_string()); - params.push(self.token.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a AuthTokenResult value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for AuthTokenResult { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub token: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing AuthTokenResult".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "token" => intermediate_rep - .token - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing AuthTokenResult".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(AuthTokenResult { - token: intermediate_rep - .token - .into_iter() - .next() - .ok_or("token missing in AuthTokenResult".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ChangelogEntry> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ChangelogEntry>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ChangelogEntry>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ChangelogEntry - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<ChangelogEntry> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ChangelogEntry as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ChangelogEntry - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ChangelogEntry { - /// Monotonically increasing sequence number of this changelog entry. - #[serde(rename = "index")] - pub index: i64, - - /// Identifier of editgroup accepted/merged in this changelog entry. - #[serde(rename = "editgroup_id")] - pub editgroup_id: String, - - /// Date and time when the editgroup was accpeted. - #[serde(rename = "timestamp")] - pub timestamp: chrono::DateTime<chrono::Utc>, - - #[serde(rename = "editgroup")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editgroup: Option<models::Editgroup>, -} - -impl ChangelogEntry { - pub fn new( - index: i64, - editgroup_id: String, - timestamp: chrono::DateTime<chrono::Utc>, - ) -> ChangelogEntry { - ChangelogEntry { - index: index, - editgroup_id: editgroup_id, - timestamp: timestamp, - editgroup: None, - } - } -} - -/// Converts the ChangelogEntry value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ChangelogEntry { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("index".to_string()); - params.push(self.index.to_string()); - - params.push("editgroup_id".to_string()); - params.push(self.editgroup_id.to_string()); - - // Skipping timestamp in query parameter serialization - - // Skipping editgroup in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ChangelogEntry value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ChangelogEntry { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub index: Vec<i64>, - pub editgroup_id: Vec<String>, - pub timestamp: Vec<chrono::DateTime<chrono::Utc>>, - pub editgroup: Vec<models::Editgroup>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ChangelogEntry".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "index" => intermediate_rep - .index - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "editgroup_id" => intermediate_rep - .editgroup_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "timestamp" => intermediate_rep.timestamp.push( - chrono::DateTime::<chrono::Utc>::from_str(val) - .map_err(|x| format!("{}", x))?, - ), - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ChangelogEntry".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ChangelogEntry { - index: intermediate_rep - .index - .into_iter() - .next() - .ok_or("index missing in ChangelogEntry".to_string())?, - editgroup_id: intermediate_rep - .editgroup_id - .into_iter() - .next() - .ok_or("editgroup_id missing in ChangelogEntry".to_string())?, - timestamp: intermediate_rep - .timestamp - .into_iter() - .next() - .ok_or("timestamp missing in ChangelogEntry".to_string())?, - editgroup: intermediate_rep.editgroup.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ContainerAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ContainerAutoBatch>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ContainerAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ContainerAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<ContainerAutoBatch> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ContainerAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ContainerAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ContainerAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::ContainerEntity>, -} - -impl ContainerAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::ContainerEntity>, - ) -> ContainerAutoBatch { - ContainerAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the ContainerAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ContainerAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ContainerAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ContainerAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::ContainerEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ContainerAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => return std::result::Result::Err( - "Parsing a container in this style is not supported in ContainerAutoBatch" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ContainerAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ContainerAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in ContainerAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in ContainerAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ContainerEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ContainerEntity>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ContainerEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ContainerEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<ContainerEntity> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ContainerEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ContainerEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ContainerEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Name of the container (eg, Journal title). Required for entity creation. - #[serde(rename = "name")] - #[serde(skip_serializing_if = "Option::is_none")] - pub name: Option<String>, - - /// Type of container, eg 'journal' or 'proceedings'. See Guide for list of valid types. - #[serde(rename = "container_type")] - #[serde(skip_serializing_if = "Option::is_none")] - pub container_type: Option<String>, - - /// Name of the organization or entity responsible for publication. Not the complete imprint/brand. - #[serde(rename = "publisher")] - #[serde(skip_serializing_if = "Option::is_none")] - pub publisher: Option<String>, - - /// Linking ISSN number (ISSN-L). Should be valid and registered with issn.org - #[serde(rename = "issnl")] - #[serde(skip_serializing_if = "Option::is_none")] - pub issnl: Option<String>, - - #[serde(rename = "wikidata_qid")] - #[serde(skip_serializing_if = "Option::is_none")] - pub wikidata_qid: Option<String>, -} - -impl ContainerEntity { - pub fn new() -> ContainerEntity { - ContainerEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - name: None, - container_type: None, - publisher: None, - issnl: None, - wikidata_qid: None, - } - } -} - -/// Converts the ContainerEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ContainerEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - if let Some(ref name) = self.name { - params.push("name".to_string()); - params.push(name.to_string()); - } - - if let Some(ref container_type) = self.container_type { - params.push("container_type".to_string()); - params.push(container_type.to_string()); - } - - if let Some(ref publisher) = self.publisher { - params.push("publisher".to_string()); - params.push(publisher.to_string()); - } - - if let Some(ref issnl) = self.issnl { - params.push("issnl".to_string()); - params.push(issnl.to_string()); - } - - if let Some(ref wikidata_qid) = self.wikidata_qid { - params.push("wikidata_qid".to_string()); - params.push(wikidata_qid.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ContainerEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ContainerEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub name: Vec<String>, - pub container_type: Vec<String>, - pub publisher: Vec<String>, - pub issnl: Vec<String>, - pub wikidata_qid: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ContainerEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 ContainerEntity" - .to_string(), - ) - } - "edit_extra" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ContainerEntity" - .to_string(), - ) - } - "name" => intermediate_rep - .name - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "container_type" => intermediate_rep - .container_type - .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))?), - "wikidata_qid" => intermediate_rep - .wikidata_qid - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ContainerEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ContainerEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - 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(), - publisher: intermediate_rep.publisher.into_iter().next(), - issnl: intermediate_rep.issnl.into_iter().next(), - wikidata_qid: intermediate_rep.wikidata_qid.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<CreatorAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<CreatorAutoBatch>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<CreatorAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for CreatorAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<CreatorAutoBatch> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <CreatorAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into CreatorAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct CreatorAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::CreatorEntity>, -} - -impl CreatorAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::CreatorEntity>, - ) -> CreatorAutoBatch { - CreatorAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the CreatorAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for CreatorAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a CreatorAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for CreatorAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::CreatorEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing CreatorAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => return std::result::Result::Err( - "Parsing a container in this style is not supported in CreatorAutoBatch" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing CreatorAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(CreatorAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in CreatorAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in CreatorAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<CreatorEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<CreatorEntity>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<CreatorEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for CreatorEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<CreatorEntity> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <CreatorEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into CreatorEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct CreatorEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Name as should be displayed in web interface or in author lists (not index/sorted). Required for valid entities. - #[serde(rename = "display_name")] - #[serde(skip_serializing_if = "Option::is_none")] - pub display_name: Option<String>, - - /// In English commonly the first name, but ordering is context and culture specific. - #[serde(rename = "given_name")] - #[serde(skip_serializing_if = "Option::is_none")] - pub given_name: Option<String>, - - /// In English commonly the last, or family name, but ordering is context and culture specific. - #[serde(rename = "surname")] - #[serde(skip_serializing_if = "Option::is_none")] - pub surname: Option<String>, - - /// ORCiD (https://orcid.org) identifier - #[serde(rename = "orcid")] - #[serde(skip_serializing_if = "Option::is_none")] - pub orcid: Option<String>, - - /// Wikidata entity QID - #[serde(rename = "wikidata_qid")] - #[serde(skip_serializing_if = "Option::is_none")] - pub wikidata_qid: Option<String>, -} - -impl CreatorEntity { - pub fn new() -> CreatorEntity { - CreatorEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - display_name: None, - given_name: None, - surname: None, - orcid: None, - wikidata_qid: None, - } - } -} - -/// Converts the CreatorEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for CreatorEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - if let Some(ref display_name) = self.display_name { - params.push("display_name".to_string()); - params.push(display_name.to_string()); - } - - if let Some(ref given_name) = self.given_name { - params.push("given_name".to_string()); - params.push(given_name.to_string()); - } - - if let Some(ref surname) = self.surname { - params.push("surname".to_string()); - params.push(surname.to_string()); - } - - if let Some(ref orcid) = self.orcid { - params.push("orcid".to_string()); - params.push(orcid.to_string()); - } - - if let Some(ref wikidata_qid) = self.wikidata_qid { - params.push("wikidata_qid".to_string()); - params.push(wikidata_qid.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a CreatorEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for CreatorEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub display_name: Vec<String>, - pub given_name: Vec<String>, - pub surname: Vec<String>, - pub orcid: Vec<String>, - pub wikidata_qid: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing CreatorEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 CreatorEntity" - .to_string(), - ) - } - "edit_extra" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in CreatorEntity" - .to_string(), - ) - } - "display_name" => intermediate_rep - .display_name - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "given_name" => intermediate_rep - .given_name - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "surname" => intermediate_rep - .surname - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "orcid" => intermediate_rep - .orcid - .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))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing CreatorEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(CreatorEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - edit_extra: intermediate_rep.edit_extra.into_iter().next(), - display_name: intermediate_rep.display_name.into_iter().next(), - given_name: intermediate_rep.given_name.into_iter().next(), - surname: intermediate_rep.surname.into_iter().next(), - orcid: intermediate_rep.orcid.into_iter().next(), - wikidata_qid: intermediate_rep.wikidata_qid.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<Editgroup> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<Editgroup>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<Editgroup>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for Editgroup - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<Editgroup> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <Editgroup as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into Editgroup - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Editgroup { - /// Fatcat identifier for this editgroup. Assigned on creation. - #[serde(rename = "editgroup_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editgroup_id: Option<String>, - - /// Fatcat identifer of editor that created this editgroup. - #[serde(rename = "editor_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editor_id: Option<String>, - - #[serde(rename = "editor")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editor: Option<models::Editor>, - - /// For accepted/merged editgroups, the changelog index that the accept occured at. WARNING: not populated in all contexts that an editgroup could be included in a response. - #[serde(rename = "changelog_index")] - #[serde(skip_serializing_if = "Option::is_none")] - pub changelog_index: Option<i64>, - - /// Timestamp when this editgroup was first created. - #[serde(rename = "created")] - #[serde(skip_serializing_if = "Option::is_none")] - pub created: Option<chrono::DateTime<chrono::Utc>>, - - /// Timestamp when this editgroup was most recently submitted for review. If withdrawn, or never submitted, will be `null`. - #[serde(rename = "submitted")] - #[serde(skip_serializing_if = "Option::is_none")] - pub submitted: Option<chrono::DateTime<chrono::Utc>>, - - /// Comment describing the changes in this editgroup. Can be updated with PUT request. - #[serde(rename = "description")] - #[serde(skip_serializing_if = "Option::is_none")] - pub description: Option<String>, - - /// Free-form JSON metadata attached to this editgroup. Eg, metadata provenance, or script user-agent details. See guide for (unenforced) schema norms. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Only included in GET responses, and not in all contexts. Do not include this field in PUT or POST requests. - #[serde(rename = "annotations")] - #[serde(skip_serializing_if = "Option::is_none")] - pub annotations: Option<Vec<models::EditgroupAnnotation>>, - - #[serde(rename = "edits")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edits: Option<models::EditgroupEdits>, -} - -impl Editgroup { - pub fn new() -> Editgroup { - Editgroup { - editgroup_id: None, - editor_id: None, - editor: None, - changelog_index: None, - created: None, - submitted: None, - description: None, - extra: None, - annotations: None, - edits: None, - } - } -} - -/// Converts the Editgroup value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for Editgroup { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref editgroup_id) = self.editgroup_id { - params.push("editgroup_id".to_string()); - params.push(editgroup_id.to_string()); - } - - if let Some(ref editor_id) = self.editor_id { - params.push("editor_id".to_string()); - params.push(editor_id.to_string()); - } - - // Skipping editor in query parameter serialization - - if let Some(ref changelog_index) = self.changelog_index { - params.push("changelog_index".to_string()); - params.push(changelog_index.to_string()); - } - - // Skipping created in query parameter serialization - - // Skipping submitted in query parameter serialization - - if let Some(ref description) = self.description { - params.push("description".to_string()); - params.push(description.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping annotations in query parameter serialization - - // Skipping edits in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a Editgroup value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for Editgroup { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup_id: Vec<String>, - pub editor_id: Vec<String>, - pub editor: Vec<models::Editor>, - pub changelog_index: Vec<i64>, - pub created: Vec<chrono::DateTime<chrono::Utc>>, - pub submitted: Vec<chrono::DateTime<chrono::Utc>>, - pub description: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub annotations: Vec<Vec<models::EditgroupAnnotation>>, - pub edits: Vec<models::EditgroupEdits>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing Editgroup".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup_id" => intermediate_rep - .editgroup_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "editor_id" => intermediate_rep - .editor_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "editor" => intermediate_rep - .editor - .push(models::Editor::from_str(val).map_err(|x| format!("{}", x))?), - "changelog_index" => intermediate_rep - .changelog_index - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "created" => intermediate_rep.created.push( - chrono::DateTime::<chrono::Utc>::from_str(val) - .map_err(|x| format!("{}", x))?, - ), - "submitted" => intermediate_rep.submitted.push( - chrono::DateTime::<chrono::Utc>::from_str(val) - .map_err(|x| format!("{}", x))?, - ), - "description" => intermediate_rep - .description - .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 Editgroup" - .to_string(), - ) - } - "annotations" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in Editgroup" - .to_string(), - ) - } - "edits" => intermediate_rep - .edits - .push(models::EditgroupEdits::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing Editgroup".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(Editgroup { - editgroup_id: intermediate_rep.editgroup_id.into_iter().next(), - editor_id: intermediate_rep.editor_id.into_iter().next(), - editor: intermediate_rep.editor.into_iter().next(), - changelog_index: intermediate_rep.changelog_index.into_iter().next(), - created: intermediate_rep.created.into_iter().next(), - submitted: intermediate_rep.submitted.into_iter().next(), - description: intermediate_rep.description.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - annotations: intermediate_rep.annotations.into_iter().next(), - edits: intermediate_rep.edits.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<EditgroupAnnotation> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<EditgroupAnnotation>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<EditgroupAnnotation>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for EditgroupAnnotation - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<EditgroupAnnotation> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <EditgroupAnnotation as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into EditgroupAnnotation - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct EditgroupAnnotation { - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "annotation_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub annotation_id: Option<String>, - - /// Editgroup that this annotation applies to. Set automatically in creations based on URL parameter. - #[serde(rename = "editgroup_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editgroup_id: Option<String>, - - /// Defaults to editor created the annotation via POST request. - #[serde(rename = "editor_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editor_id: Option<String>, - - #[serde(rename = "editor")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editor: Option<models::Editor>, - - /// Timestamp when annotation was first created. - #[serde(rename = "created")] - #[serde(skip_serializing_if = "Option::is_none")] - pub created: Option<chrono::DateTime<chrono::Utc>>, - - #[serde(rename = "comment_markdown")] - #[serde(skip_serializing_if = "Option::is_none")] - pub comment_markdown: Option<String>, - - /// Additional free-form JSON metadata that can be included as part of the annotation (or even as the primary annotation itself). See guide for details. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, -} - -impl EditgroupAnnotation { - pub fn new() -> EditgroupAnnotation { - EditgroupAnnotation { - annotation_id: None, - editgroup_id: None, - editor_id: None, - editor: None, - created: None, - comment_markdown: None, - extra: None, - } - } -} - -/// Converts the EditgroupAnnotation value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for EditgroupAnnotation { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref annotation_id) = self.annotation_id { - params.push("annotation_id".to_string()); - params.push(annotation_id.to_string()); - } - - if let Some(ref editgroup_id) = self.editgroup_id { - params.push("editgroup_id".to_string()); - params.push(editgroup_id.to_string()); - } - - if let Some(ref editor_id) = self.editor_id { - params.push("editor_id".to_string()); - params.push(editor_id.to_string()); - } - - // Skipping editor in query parameter serialization - - // Skipping created in query parameter serialization - - if let Some(ref comment_markdown) = self.comment_markdown { - params.push("comment_markdown".to_string()); - params.push(comment_markdown.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a EditgroupAnnotation value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for EditgroupAnnotation { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub annotation_id: Vec<String>, - pub editgroup_id: Vec<String>, - pub editor_id: Vec<String>, - pub editor: Vec<models::Editor>, - pub created: Vec<chrono::DateTime<chrono::Utc>>, - pub comment_markdown: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing EditgroupAnnotation".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "annotation_id" => intermediate_rep - .annotation_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "editgroup_id" => intermediate_rep - .editgroup_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "editor_id" => intermediate_rep - .editor_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "editor" => intermediate_rep - .editor - .push(models::Editor::from_str(val).map_err(|x| format!("{}", x))?), - "created" => intermediate_rep.created.push( - chrono::DateTime::<chrono::Utc>::from_str(val) - .map_err(|x| format!("{}", x))?, - ), - "comment_markdown" => intermediate_rep - .comment_markdown - .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 EditgroupAnnotation" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing EditgroupAnnotation".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(EditgroupAnnotation { - annotation_id: intermediate_rep.annotation_id.into_iter().next(), - editgroup_id: intermediate_rep.editgroup_id.into_iter().next(), - editor_id: intermediate_rep.editor_id.into_iter().next(), - editor: intermediate_rep.editor.into_iter().next(), - created: intermediate_rep.created.into_iter().next(), - comment_markdown: intermediate_rep.comment_markdown.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - }) - } -} - -/// Only included in GET responses, and not in all contexts. Do not include this field in PUT or POST requests. -// Methods for converting between header::IntoHeaderValue<EditgroupEdits> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<EditgroupEdits>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<EditgroupEdits>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for EditgroupEdits - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<EditgroupEdits> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <EditgroupEdits as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into EditgroupEdits - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct EditgroupEdits { - #[serde(rename = "containers")] - #[serde(skip_serializing_if = "Option::is_none")] - pub containers: Option<Vec<models::EntityEdit>>, - - #[serde(rename = "creators")] - #[serde(skip_serializing_if = "Option::is_none")] - pub creators: Option<Vec<models::EntityEdit>>, - - #[serde(rename = "files")] - #[serde(skip_serializing_if = "Option::is_none")] - pub files: Option<Vec<models::EntityEdit>>, - - #[serde(rename = "filesets")] - #[serde(skip_serializing_if = "Option::is_none")] - pub filesets: Option<Vec<models::EntityEdit>>, - - #[serde(rename = "webcaptures")] - #[serde(skip_serializing_if = "Option::is_none")] - pub webcaptures: Option<Vec<models::EntityEdit>>, - - #[serde(rename = "releases")] - #[serde(skip_serializing_if = "Option::is_none")] - pub releases: Option<Vec<models::EntityEdit>>, - - #[serde(rename = "works")] - #[serde(skip_serializing_if = "Option::is_none")] - pub works: Option<Vec<models::EntityEdit>>, -} - -impl EditgroupEdits { - pub fn new() -> EditgroupEdits { - EditgroupEdits { - containers: None, - creators: None, - files: None, - filesets: None, - webcaptures: None, - releases: None, - works: None, - } - } -} - -/// Converts the EditgroupEdits value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for EditgroupEdits { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping containers in query parameter serialization - - // Skipping creators in query parameter serialization - - // Skipping files in query parameter serialization - - // Skipping filesets in query parameter serialization - - // Skipping webcaptures in query parameter serialization - - // Skipping releases in query parameter serialization - - // Skipping works in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a EditgroupEdits value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for EditgroupEdits { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub containers: Vec<Vec<models::EntityEdit>>, - pub creators: Vec<Vec<models::EntityEdit>>, - pub files: Vec<Vec<models::EntityEdit>>, - pub filesets: Vec<Vec<models::EntityEdit>>, - pub webcaptures: Vec<Vec<models::EntityEdit>>, - pub releases: Vec<Vec<models::EntityEdit>>, - pub works: Vec<Vec<models::EntityEdit>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing EditgroupEdits".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "containers" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - "creators" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - "files" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - "filesets" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - "webcaptures" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - "releases" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - "works" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in EditgroupEdits" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing EditgroupEdits".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(EditgroupEdits { - containers: intermediate_rep.containers.into_iter().next(), - creators: intermediate_rep.creators.into_iter().next(), - files: intermediate_rep.files.into_iter().next(), - filesets: intermediate_rep.filesets.into_iter().next(), - webcaptures: intermediate_rep.webcaptures.into_iter().next(), - releases: intermediate_rep.releases.into_iter().next(), - works: intermediate_rep.works.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<Editor> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<Editor>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<Editor>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for Editor - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<Editor> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <Editor as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into Editor - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Editor { - /// Fatcat identifier for the editor. Can not be changed. - #[serde(rename = "editor_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub editor_id: Option<String>, - - /// Username/handle (short slug-like string) to identify this editor. May be changed at any time by the editor; use the `editor_id` as a persistend identifer. - #[serde(rename = "username")] - pub username: String, - - /// Whether this editor has the `admin` role. - #[serde(rename = "is_admin")] - #[serde(skip_serializing_if = "Option::is_none")] - pub is_admin: Option<bool>, - - /// Whether this editor is a bot (as opposed to a human making manual edits) - #[serde(rename = "is_bot")] - #[serde(skip_serializing_if = "Option::is_none")] - pub is_bot: Option<bool>, - - /// Whether this editor's account is enabled (if not API tokens and web logins will not work). - #[serde(rename = "is_active")] - #[serde(skip_serializing_if = "Option::is_none")] - pub is_active: Option<bool>, -} - -impl Editor { - pub fn new(username: String) -> Editor { - Editor { - editor_id: None, - username: username, - is_admin: None, - is_bot: None, - is_active: None, - } - } -} - -/// Converts the Editor value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for Editor { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref editor_id) = self.editor_id { - params.push("editor_id".to_string()); - params.push(editor_id.to_string()); - } - - params.push("username".to_string()); - params.push(self.username.to_string()); - - if let Some(ref is_admin) = self.is_admin { - params.push("is_admin".to_string()); - params.push(is_admin.to_string()); - } - - if let Some(ref is_bot) = self.is_bot { - params.push("is_bot".to_string()); - params.push(is_bot.to_string()); - } - - if let Some(ref is_active) = self.is_active { - params.push("is_active".to_string()); - params.push(is_active.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a Editor value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for Editor { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editor_id: Vec<String>, - pub username: Vec<String>, - pub is_admin: Vec<bool>, - pub is_bot: Vec<bool>, - pub is_active: Vec<bool>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing Editor".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editor_id" => intermediate_rep - .editor_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "username" => intermediate_rep - .username - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "is_admin" => intermediate_rep - .is_admin - .push(bool::from_str(val).map_err(|x| format!("{}", x))?), - "is_bot" => intermediate_rep - .is_bot - .push(bool::from_str(val).map_err(|x| format!("{}", x))?), - "is_active" => intermediate_rep - .is_active - .push(bool::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing Editor".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(Editor { - editor_id: intermediate_rep.editor_id.into_iter().next(), - username: intermediate_rep - .username - .into_iter() - .next() - .ok_or("username missing in Editor".to_string())?, - is_admin: intermediate_rep.is_admin.into_iter().next(), - is_bot: intermediate_rep.is_bot.into_iter().next(), - is_active: intermediate_rep.is_active.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<EntityEdit> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<EntityEdit>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<EntityEdit>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for EntityEdit - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<EntityEdit> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <EntityEdit as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into EntityEdit - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct EntityEdit { - /// Unique UUID for this specific edit object. - #[serde(rename = "edit_id")] - pub edit_id: String, - - /// Fatcat identifier of the entity this edit is mutating. - #[serde(rename = "ident")] - pub ident: String, - - /// Entity revision that this edit will set the entity to. May be `null` in the case of deletions. - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// Revision of entity just before this edit. May be used in the future to prevent edit race conditions. - #[serde(rename = "prev_revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub prev_revision: Option<String>, - - /// When an edit is to merge entities (redirect one to another), this is the entity fatcat identifier for the target entity. - #[serde(rename = "redirect_ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect_ident: Option<String>, - - /// Editgroup identifier that this edit is part of. - #[serde(rename = "editgroup_id")] - pub editgroup_id: String, - - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, -} - -impl EntityEdit { - pub fn new(edit_id: String, ident: String, editgroup_id: String) -> EntityEdit { - EntityEdit { - edit_id: edit_id, - ident: ident, - revision: None, - prev_revision: None, - redirect_ident: None, - editgroup_id: editgroup_id, - extra: None, - } - } -} - -/// Converts the EntityEdit value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for EntityEdit { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("edit_id".to_string()); - params.push(self.edit_id.to_string()); - - params.push("ident".to_string()); - params.push(self.ident.to_string()); - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref prev_revision) = self.prev_revision { - params.push("prev_revision".to_string()); - params.push(prev_revision.to_string()); - } - - if let Some(ref redirect_ident) = self.redirect_ident { - params.push("redirect_ident".to_string()); - params.push(redirect_ident.to_string()); - } - - params.push("editgroup_id".to_string()); - params.push(self.editgroup_id.to_string()); - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a EntityEdit value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for EntityEdit { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub edit_id: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub prev_revision: Vec<String>, - pub redirect_ident: Vec<String>, - pub editgroup_id: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing EntityEdit".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "edit_id" => intermediate_rep - .edit_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "prev_revision" => intermediate_rep - .prev_revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect_ident" => intermediate_rep - .redirect_ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "editgroup_id" => intermediate_rep - .editgroup_id - .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 EntityEdit" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing EntityEdit".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(EntityEdit { - edit_id: intermediate_rep - .edit_id - .into_iter() - .next() - .ok_or("edit_id missing in EntityEdit".to_string())?, - ident: intermediate_rep - .ident - .into_iter() - .next() - .ok_or("ident missing in EntityEdit".to_string())?, - revision: intermediate_rep.revision.into_iter().next(), - prev_revision: intermediate_rep.prev_revision.into_iter().next(), - redirect_ident: intermediate_rep.redirect_ident.into_iter().next(), - editgroup_id: intermediate_rep - .editgroup_id - .into_iter() - .next() - .ok_or("editgroup_id missing in EntityEdit".to_string())?, - extra: intermediate_rep.extra.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<EntityHistoryEntry> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<EntityHistoryEntry>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<EntityHistoryEntry>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for EntityHistoryEntry - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<EntityHistoryEntry> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <EntityHistoryEntry as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into EntityHistoryEntry - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct EntityHistoryEntry { - #[serde(rename = "edit")] - pub edit: models::EntityEdit, - - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "changelog_entry")] - pub changelog_entry: models::ChangelogEntry, -} - -impl EntityHistoryEntry { - pub fn new( - edit: models::EntityEdit, - editgroup: models::Editgroup, - changelog_entry: models::ChangelogEntry, - ) -> EntityHistoryEntry { - EntityHistoryEntry { - edit: edit, - editgroup: editgroup, - changelog_entry: changelog_entry, - } - } -} - -/// Converts the EntityHistoryEntry value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for EntityHistoryEntry { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping edit in query parameter serialization - - // Skipping editgroup in query parameter serialization - - // Skipping changelog_entry in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a EntityHistoryEntry value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for EntityHistoryEntry { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub edit: Vec<models::EntityEdit>, - pub editgroup: Vec<models::Editgroup>, - pub changelog_entry: Vec<models::ChangelogEntry>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing EntityHistoryEntry".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "edit" => intermediate_rep - .edit - .push(models::EntityEdit::from_str(val).map_err(|x| format!("{}", x))?), - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "changelog_entry" => intermediate_rep - .changelog_entry - .push(models::ChangelogEntry::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing EntityHistoryEntry".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(EntityHistoryEntry { - edit: intermediate_rep - .edit - .into_iter() - .next() - .ok_or("edit missing in EntityHistoryEntry".to_string())?, - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in EntityHistoryEntry".to_string())?, - changelog_entry: intermediate_rep - .changelog_entry - .into_iter() - .next() - .ok_or("changelog_entry missing in EntityHistoryEntry".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ErrorResponse> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ErrorResponse>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ErrorResponse>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ErrorResponse - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<ErrorResponse> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ErrorResponse as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ErrorResponse - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ErrorResponse { - #[serde(rename = "success")] - pub success: bool, - - #[serde(rename = "error")] - pub error: String, - - #[serde(rename = "message")] - pub message: String, -} - -impl ErrorResponse { - pub fn new(success: bool, error: String, message: String) -> ErrorResponse { - ErrorResponse { - success: success, - error: error, - message: message, - } - } -} - -/// Converts the ErrorResponse value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ErrorResponse { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("success".to_string()); - params.push(self.success.to_string()); - - params.push("error".to_string()); - params.push(self.error.to_string()); - - params.push("message".to_string()); - params.push(self.message.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ErrorResponse value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ErrorResponse { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub success: Vec<bool>, - pub error: Vec<String>, - pub message: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ErrorResponse".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "success" => intermediate_rep - .success - .push(bool::from_str(val).map_err(|x| format!("{}", x))?), - "error" => intermediate_rep - .error - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "message" => intermediate_rep - .message - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ErrorResponse".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ErrorResponse { - success: intermediate_rep - .success - .into_iter() - .next() - .ok_or("success missing in ErrorResponse".to_string())?, - error: intermediate_rep - .error - .into_iter() - .next() - .ok_or("error missing in ErrorResponse".to_string())?, - message: intermediate_rep - .message - .into_iter() - .next() - .ok_or("message missing in ErrorResponse".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FileAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FileAutoBatch>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FileAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FileAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<FileAutoBatch> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FileAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FileAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FileAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::FileEntity>, -} - -impl FileAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::FileEntity>, - ) -> FileAutoBatch { - FileAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the FileAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FileAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FileAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FileAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::FileEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FileAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FileAutoBatch" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FileAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FileAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in FileAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in FileAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FileEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FileEntity>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FileEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FileEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<FileEntity> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FileEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FileEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FileEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Size of file in bytes. Non-zero. - #[serde(rename = "size")] - #[serde(skip_serializing_if = "Option::is_none")] - pub size: Option<i64>, - - /// MD5 hash of data, in hex encoding - #[serde(rename = "md5")] - #[serde(skip_serializing_if = "Option::is_none")] - pub md5: Option<String>, - - /// SHA-1 hash of data, in hex encoding - #[serde(rename = "sha1")] - #[serde(skip_serializing_if = "Option::is_none")] - pub sha1: Option<String>, - - /// SHA-256 hash of data, in hex encoding - #[serde(rename = "sha256")] - #[serde(skip_serializing_if = "Option::is_none")] - pub sha256: Option<String>, - - #[serde(rename = "urls")] - #[serde(skip_serializing_if = "Option::is_none")] - pub urls: Option<Vec<models::FileUrl>>, - - #[serde(rename = "mimetype")] - #[serde(skip_serializing_if = "Option::is_none")] - pub mimetype: Option<String>, - - /// Set of identifier of release entities this file represents a full manifestation of. Usually a single release, but some files contain content of multiple full releases (eg, an issue of a journal). - #[serde(rename = "release_ids")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_ids: Option<Vec<String>>, - - /// Full release entities, included in GET responses when `releases` included in `expand` parameter. Ignored if included in PUT or POST requests. - #[serde(rename = "releases")] - #[serde(skip_serializing_if = "Option::is_none")] - pub releases: Option<Vec<models::ReleaseEntity>>, -} - -impl FileEntity { - pub fn new() -> FileEntity { - FileEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - size: None, - md5: None, - sha1: None, - sha256: None, - urls: None, - mimetype: None, - release_ids: None, - releases: None, - } - } -} - -/// Converts the FileEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FileEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - if let Some(ref size) = self.size { - params.push("size".to_string()); - params.push(size.to_string()); - } - - if let Some(ref md5) = self.md5 { - params.push("md5".to_string()); - params.push(md5.to_string()); - } - - if let Some(ref sha1) = self.sha1 { - params.push("sha1".to_string()); - params.push(sha1.to_string()); - } - - if let Some(ref sha256) = self.sha256 { - params.push("sha256".to_string()); - params.push(sha256.to_string()); - } - - // Skipping urls in query parameter serialization - - if let Some(ref mimetype) = self.mimetype { - params.push("mimetype".to_string()); - params.push(mimetype.to_string()); - } - - if let Some(ref release_ids) = self.release_ids { - params.push("release_ids".to_string()); - params.push( - release_ids - .iter() - .map(|x| x.to_string()) - .collect::<Vec<_>>() - .join(",") - .to_string(), - ); - } - - // Skipping releases in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FileEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FileEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub size: Vec<i64>, - pub md5: Vec<String>, - pub sha1: Vec<String>, - pub sha256: Vec<String>, - pub urls: Vec<Vec<models::FileUrl>>, - pub mimetype: Vec<String>, - pub release_ids: Vec<Vec<String>>, - pub releases: Vec<Vec<models::ReleaseEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FileEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 FileEntity" - .to_string(), - ) - } - "edit_extra" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FileEntity" - .to_string(), - ) - } - "size" => intermediate_rep - .size - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "md5" => intermediate_rep - .md5 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "sha1" => intermediate_rep - .sha1 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "sha256" => intermediate_rep - .sha256 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "urls" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FileEntity" - .to_string(), - ) - } - "mimetype" => intermediate_rep - .mimetype - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "release_ids" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FileEntity" - .to_string(), - ) - } - "releases" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FileEntity" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FileEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FileEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - edit_extra: intermediate_rep.edit_extra.into_iter().next(), - size: intermediate_rep.size.into_iter().next(), - md5: intermediate_rep.md5.into_iter().next(), - sha1: intermediate_rep.sha1.into_iter().next(), - sha256: intermediate_rep.sha256.into_iter().next(), - urls: intermediate_rep.urls.into_iter().next(), - mimetype: intermediate_rep.mimetype.into_iter().next(), - release_ids: intermediate_rep.release_ids.into_iter().next(), - releases: intermediate_rep.releases.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FileUrl> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FileUrl>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FileUrl>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FileUrl - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<FileUrl> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FileUrl as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FileUrl - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FileUrl { - /// URL/URI pointing directly to a machine retrievable copy of this exact file. - #[serde(rename = "url")] - pub url: String, - - /// Indicates type of host this URL points to. Eg, \"publisher\", \"repository\", \"webarchive\". See guide for list of acceptable values. - #[serde(rename = "rel")] - pub rel: String, -} - -impl FileUrl { - pub fn new(url: String, rel: String) -> FileUrl { - FileUrl { url: url, rel: rel } - } -} - -/// Converts the FileUrl value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FileUrl { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("url".to_string()); - params.push(self.url.to_string()); - - params.push("rel".to_string()); - params.push(self.rel.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FileUrl value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FileUrl { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub url: Vec<String>, - pub rel: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FileUrl".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "url" => intermediate_rep - .url - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "rel" => intermediate_rep - .rel - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FileUrl".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FileUrl { - url: intermediate_rep - .url - .into_iter() - .next() - .ok_or("url missing in FileUrl".to_string())?, - rel: intermediate_rep - .rel - .into_iter() - .next() - .ok_or("rel missing in FileUrl".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FilesetAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FilesetAutoBatch>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FilesetAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FilesetAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<FilesetAutoBatch> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FilesetAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FilesetAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FilesetAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::FilesetEntity>, -} - -impl FilesetAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::FilesetEntity>, - ) -> FilesetAutoBatch { - FilesetAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the FilesetAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FilesetAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FilesetAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FilesetAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::FilesetEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FilesetAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => return std::result::Result::Err( - "Parsing a container in this style is not supported in FilesetAutoBatch" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FilesetAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FilesetAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in FilesetAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in FilesetAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FilesetEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FilesetEntity>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FilesetEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FilesetEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<FilesetEntity> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FilesetEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FilesetEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FilesetEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - #[serde(rename = "manifest")] - #[serde(skip_serializing_if = "Option::is_none")] - pub manifest: Option<Vec<models::FilesetFile>>, - - #[serde(rename = "urls")] - #[serde(skip_serializing_if = "Option::is_none")] - pub urls: Option<Vec<models::FilesetUrl>>, - - /// Set of identifier of release entities this fileset represents a full manifestation of. Usually a single release. - #[serde(rename = "release_ids")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_ids: Option<Vec<String>>, - - /// Full release entities, included in GET responses when `releases` included in `expand` parameter. Ignored if included in PUT or POST requests. - #[serde(rename = "releases")] - #[serde(skip_serializing_if = "Option::is_none")] - pub releases: Option<Vec<models::ReleaseEntity>>, -} - -impl FilesetEntity { - pub fn new() -> FilesetEntity { - FilesetEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - manifest: None, - urls: None, - release_ids: None, - releases: None, - } - } -} - -/// Converts the FilesetEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FilesetEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - // Skipping manifest in query parameter serialization - - // Skipping urls in query parameter serialization - - if let Some(ref release_ids) = self.release_ids { - params.push("release_ids".to_string()); - params.push( - release_ids - .iter() - .map(|x| x.to_string()) - .collect::<Vec<_>>() - .join(",") - .to_string(), - ); - } - - // Skipping releases in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FilesetEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FilesetEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub manifest: Vec<Vec<models::FilesetFile>>, - pub urls: Vec<Vec<models::FilesetUrl>>, - pub release_ids: Vec<Vec<String>>, - pub releases: Vec<Vec<models::ReleaseEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FilesetEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 FilesetEntity" - .to_string(), - ) - } - "edit_extra" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FilesetEntity" - .to_string(), - ) - } - "manifest" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FilesetEntity" - .to_string(), - ) - } - "urls" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FilesetEntity" - .to_string(), - ) - } - "release_ids" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FilesetEntity" - .to_string(), - ) - } - "releases" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in FilesetEntity" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FilesetEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FilesetEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - edit_extra: intermediate_rep.edit_extra.into_iter().next(), - manifest: intermediate_rep.manifest.into_iter().next(), - urls: intermediate_rep.urls.into_iter().next(), - release_ids: intermediate_rep.release_ids.into_iter().next(), - releases: intermediate_rep.releases.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FilesetFile> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FilesetFile>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FilesetFile>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FilesetFile - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<FilesetFile> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FilesetFile as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FilesetFile - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FilesetFile { - /// Path name of file within this fileset (eg, directory) - #[serde(rename = "path")] - pub path: String, - - /// File size in bytes - #[serde(rename = "size")] - pub size: i64, - - /// MD5 hash of data, in hex encoding - #[serde(rename = "md5")] - #[serde(skip_serializing_if = "Option::is_none")] - pub md5: Option<String>, - - /// SHA-1 hash of data, in hex encoding - #[serde(rename = "sha1")] - #[serde(skip_serializing_if = "Option::is_none")] - pub sha1: Option<String>, - - /// SHA-256 hash of data, in hex encoding - #[serde(rename = "sha256")] - #[serde(skip_serializing_if = "Option::is_none")] - pub sha256: Option<String>, - - /// Free-form additional metadata about this specific file in the set. Eg, `mimetype`. See guide for nomative (but unenforced) schema fields. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, -} - -impl FilesetFile { - pub fn new(path: String, size: i64) -> FilesetFile { - FilesetFile { - path: path, - size: size, - md5: None, - sha1: None, - sha256: None, - extra: None, - } - } -} - -/// Converts the FilesetFile value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FilesetFile { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("path".to_string()); - params.push(self.path.to_string()); - - params.push("size".to_string()); - params.push(self.size.to_string()); - - if let Some(ref md5) = self.md5 { - params.push("md5".to_string()); - params.push(md5.to_string()); - } - - if let Some(ref sha1) = self.sha1 { - params.push("sha1".to_string()); - params.push(sha1.to_string()); - } - - if let Some(ref sha256) = self.sha256 { - params.push("sha256".to_string()); - params.push(sha256.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FilesetFile value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FilesetFile { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub path: Vec<String>, - pub size: Vec<i64>, - pub md5: Vec<String>, - pub sha1: Vec<String>, - pub sha256: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FilesetFile".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "path" => intermediate_rep - .path - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "size" => intermediate_rep - .size - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "md5" => intermediate_rep - .md5 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "sha1" => intermediate_rep - .sha1 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "sha256" => intermediate_rep - .sha256 - .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" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FilesetFile".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FilesetFile { - path: intermediate_rep - .path - .into_iter() - .next() - .ok_or("path missing in FilesetFile".to_string())?, - size: intermediate_rep - .size - .into_iter() - .next() - .ok_or("size missing in FilesetFile".to_string())?, - md5: intermediate_rep.md5.into_iter().next(), - sha1: intermediate_rep.sha1.into_iter().next(), - sha256: intermediate_rep.sha256.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<FilesetUrl> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<FilesetUrl>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<FilesetUrl>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for FilesetUrl - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<FilesetUrl> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <FilesetUrl as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into FilesetUrl - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct FilesetUrl { - #[serde(rename = "url")] - pub url: String, - - /// Indicates type of host this URL points to. See guide for list of acceptable values. - #[serde(rename = "rel")] - pub rel: String, -} - -impl FilesetUrl { - pub fn new(url: String, rel: String) -> FilesetUrl { - FilesetUrl { url: url, rel: rel } - } -} - -/// Converts the FilesetUrl value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for FilesetUrl { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("url".to_string()); - params.push(self.url.to_string()); - - params.push("rel".to_string()); - params.push(self.rel.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a FilesetUrl value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for FilesetUrl { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub url: Vec<String>, - pub rel: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing FilesetUrl".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "url" => intermediate_rep - .url - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "rel" => intermediate_rep - .rel - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing FilesetUrl".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(FilesetUrl { - url: intermediate_rep - .url - .into_iter() - .next() - .ok_or("url missing in FilesetUrl".to_string())?, - rel: intermediate_rep - .rel - .into_iter() - .next() - .ok_or("rel missing in FilesetUrl".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ReleaseAbstract> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ReleaseAbstract>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ReleaseAbstract>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ReleaseAbstract - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<ReleaseAbstract> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ReleaseAbstract as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ReleaseAbstract - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ReleaseAbstract { - /// SHA-1 hash of data, in hex encoding - #[serde(rename = "sha1")] - #[serde(skip_serializing_if = "Option::is_none")] - pub sha1: Option<String>, - - /// Abstract content. May be encoded, as per `mimetype` field, but only string/text content may be included. - #[serde(rename = "content")] - #[serde(skip_serializing_if = "Option::is_none")] - pub content: Option<String>, - - /// Mimetype of abstract contents. `text/plain` is the default if content isn't encoded. - #[serde(rename = "mimetype")] - #[serde(skip_serializing_if = "Option::is_none")] - pub mimetype: Option<String>, - - /// ISO language code of the abstract. Same semantics as release `language` field. - #[serde(rename = "lang")] - #[serde(skip_serializing_if = "Option::is_none")] - pub lang: Option<String>, -} - -impl ReleaseAbstract { - pub fn new() -> ReleaseAbstract { - ReleaseAbstract { - sha1: None, - content: None, - mimetype: None, - lang: None, - } - } -} - -/// Converts the ReleaseAbstract value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ReleaseAbstract { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref sha1) = self.sha1 { - params.push("sha1".to_string()); - params.push(sha1.to_string()); - } - - if let Some(ref content) = self.content { - params.push("content".to_string()); - params.push(content.to_string()); - } - - if let Some(ref mimetype) = self.mimetype { - params.push("mimetype".to_string()); - params.push(mimetype.to_string()); - } - - if let Some(ref lang) = self.lang { - params.push("lang".to_string()); - params.push(lang.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ReleaseAbstract value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ReleaseAbstract { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub sha1: Vec<String>, - pub content: Vec<String>, - pub mimetype: Vec<String>, - pub lang: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ReleaseAbstract".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "sha1" => intermediate_rep - .sha1 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "content" => intermediate_rep - .content - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "mimetype" => intermediate_rep - .mimetype - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "lang" => intermediate_rep - .lang - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ReleaseAbstract".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ReleaseAbstract { - sha1: intermediate_rep.sha1.into_iter().next(), - content: intermediate_rep.content.into_iter().next(), - mimetype: intermediate_rep.mimetype.into_iter().next(), - lang: intermediate_rep.lang.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ReleaseAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ReleaseAutoBatch>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ReleaseAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ReleaseAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<ReleaseAutoBatch> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ReleaseAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ReleaseAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ReleaseAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::ReleaseEntity>, -} - -impl ReleaseAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::ReleaseEntity>, - ) -> ReleaseAutoBatch { - ReleaseAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the ReleaseAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ReleaseAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ReleaseAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ReleaseAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::ReleaseEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ReleaseAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseAutoBatch" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ReleaseAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ReleaseAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in ReleaseAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in ReleaseAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ReleaseContrib> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ReleaseContrib>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ReleaseContrib>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ReleaseContrib - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<ReleaseContrib> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ReleaseContrib as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ReleaseContrib - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ReleaseContrib { - /// Internally assigned zero-indexed sequence number of contribution. Authors should come first; this encodes the order of attriubtion. - #[serde(rename = "index")] - #[serde(skip_serializing_if = "Option::is_none")] - pub index: Option<i64>, - - /// If known, indicates the creator entity this contribution was made by. - #[serde(rename = "creator_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub creator_id: Option<String>, - - #[serde(rename = "creator")] - #[serde(skip_serializing_if = "Option::is_none")] - pub creator: Option<models::CreatorEntity>, - - /// Full name of the contributor as typeset in the release. - #[serde(rename = "raw_name")] - #[serde(skip_serializing_if = "Option::is_none")] - pub raw_name: Option<String>, - - /// In English commonly the first name, but ordering is context and culture specific. - #[serde(rename = "given_name")] - #[serde(skip_serializing_if = "Option::is_none")] - pub given_name: Option<String>, - - /// In English commonly the last, or family name, but ordering is context and culture specific. - #[serde(rename = "surname")] - #[serde(skip_serializing_if = "Option::is_none")] - pub surname: Option<String>, - - /// Short string (slug) indicating type of contribution (eg, \"author\", \"translator\"). See guide for list of accpeted values. - #[serde(rename = "role")] - #[serde(skip_serializing_if = "Option::is_none")] - pub role: Option<String>, - - /// Raw affiliation string as displayed in text - #[serde(rename = "raw_affiliation")] - #[serde(skip_serializing_if = "Option::is_none")] - pub raw_affiliation: Option<String>, - - /// Additional free-form JSON metadata about this contributor/contribution. See guide for normative schema. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, -} - -impl ReleaseContrib { - pub fn new() -> ReleaseContrib { - ReleaseContrib { - index: None, - creator_id: None, - creator: None, - raw_name: None, - given_name: None, - surname: None, - role: None, - raw_affiliation: None, - extra: None, - } - } -} - -/// Converts the ReleaseContrib value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ReleaseContrib { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref index) = self.index { - params.push("index".to_string()); - params.push(index.to_string()); - } - - if let Some(ref creator_id) = self.creator_id { - params.push("creator_id".to_string()); - params.push(creator_id.to_string()); - } - - // Skipping creator in query parameter serialization - - if let Some(ref raw_name) = self.raw_name { - params.push("raw_name".to_string()); - params.push(raw_name.to_string()); - } - - if let Some(ref given_name) = self.given_name { - params.push("given_name".to_string()); - params.push(given_name.to_string()); - } - - if let Some(ref surname) = self.surname { - params.push("surname".to_string()); - params.push(surname.to_string()); - } - - if let Some(ref role) = self.role { - params.push("role".to_string()); - params.push(role.to_string()); - } - - if let Some(ref raw_affiliation) = self.raw_affiliation { - params.push("raw_affiliation".to_string()); - params.push(raw_affiliation.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ReleaseContrib value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ReleaseContrib { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub index: Vec<i64>, - pub creator_id: Vec<String>, - pub creator: Vec<models::CreatorEntity>, - pub raw_name: Vec<String>, - pub given_name: Vec<String>, - pub surname: Vec<String>, - pub role: Vec<String>, - pub raw_affiliation: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ReleaseContrib".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "index" => intermediate_rep - .index - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "creator_id" => intermediate_rep - .creator_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "creator" => intermediate_rep - .creator - .push(models::CreatorEntity::from_str(val).map_err(|x| format!("{}", x))?), - "raw_name" => intermediate_rep - .raw_name - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "given_name" => intermediate_rep - .given_name - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "surname" => intermediate_rep - .surname - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "role" => intermediate_rep - .role - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "raw_affiliation" => intermediate_rep - .raw_affiliation - .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 ReleaseContrib" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ReleaseContrib".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ReleaseContrib { - index: intermediate_rep.index.into_iter().next(), - creator_id: intermediate_rep.creator_id.into_iter().next(), - creator: intermediate_rep.creator.into_iter().next(), - raw_name: intermediate_rep.raw_name.into_iter().next(), - given_name: intermediate_rep.given_name.into_iter().next(), - surname: intermediate_rep.surname.into_iter().next(), - role: intermediate_rep.role.into_iter().next(), - raw_affiliation: intermediate_rep.raw_affiliation.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ReleaseEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ReleaseEntity>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ReleaseEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ReleaseEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<ReleaseEntity> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ReleaseEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ReleaseEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ReleaseEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Required for valid entities. The title used in citations and for display. Sometimes the English translation of title e even if release content is not English. - #[serde(rename = "title")] - #[serde(skip_serializing_if = "Option::is_none")] - pub title: Option<String>, - - /// Subtitle of release. In many cases, better to merge with title than include as separate field (unless combined title would be very long). See guide for details. - #[serde(rename = "subtitle")] - #[serde(skip_serializing_if = "Option::is_none")] - pub subtitle: Option<String>, - - /// Title in original language if `title` field has been translated. See guide for details. - #[serde(rename = "original_title")] - #[serde(skip_serializing_if = "Option::is_none")] - pub original_title: Option<String>, - - /// Identifier of work this release is part of. In creation (POST) requests, a work entity will be created automatically if this field is not set. - #[serde(rename = "work_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub work_id: Option<String>, - - #[serde(rename = "container")] - #[serde(skip_serializing_if = "Option::is_none")] - pub container: Option<models::ContainerEntity>, - - /// Complete file entities identified by `file_ids` field. Only included in GET responses when `files` included in `expand` parameter; ignored in PUT or POST requests. - #[serde(rename = "files")] - #[serde(skip_serializing_if = "Option::is_none")] - pub files: Option<Vec<models::FileEntity>>, - - /// Complete file entities identified by `filesets_ids` field. Only included in GET responses when `filesets` included in `expand` parameter; ignored in PUT or POST requests. - #[serde(rename = "filesets")] - #[serde(skip_serializing_if = "Option::is_none")] - pub filesets: Option<Vec<models::FilesetEntity>>, - - /// Complete webcapture entities identified by `webcapture_ids` field. Only included in GET responses when `webcaptures` included in `expand` parameter; ignored in PUT or POST requests. - #[serde(rename = "webcaptures")] - #[serde(skip_serializing_if = "Option::is_none")] - pub webcaptures: Option<Vec<models::WebcaptureEntity>>, - - /// Used to link this release to a container entity that the release was published as part of. - #[serde(rename = "container_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub container_id: Option<String>, - - /// \"Type\" or \"medium\" that this release is published as. See guide for valid values. - #[serde(rename = "release_type")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_type: Option<String>, - - /// The stage of publication of this specific release. See guide for valid values and semantics. - #[serde(rename = "release_stage")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_stage: Option<String>, - - /// Full date when this release was formally published. ISO format, like `2019-03-05`. See guide for semantics. - #[serde(rename = "release_date")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_date: Option<chrono::NaiveDate>, - - /// Year when this release was formally published. Must match `release_date` if that field is set; this field exists because sometimes only the year is known. - #[serde(rename = "release_year")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_year: Option<i64>, - - /// Type of withdrawl or retraction of this release, if applicable. If release has not been withdrawn, should be `null` (aka, not set, not the string \"null\" or an empty string). - #[serde(rename = "withdrawn_status")] - #[serde(skip_serializing_if = "Option::is_none")] - pub withdrawn_status: Option<String>, - - /// Full date when this release was formally withdrawn (if applicable). ISO format, like `release_date`. - #[serde(rename = "withdrawn_date")] - #[serde(skip_serializing_if = "Option::is_none")] - pub withdrawn_date: Option<chrono::NaiveDate>, - - /// Year corresponding with `withdrawn_date` like `release_year`/`release_date`. - #[serde(rename = "withdrawn_year")] - #[serde(skip_serializing_if = "Option::is_none")] - pub withdrawn_year: Option<i64>, - - #[serde(rename = "ext_ids")] - pub ext_ids: models::ReleaseExtIds, - - /// Volume number of container that this release was published in. Often corresponds to the \"Nth\" year of publication, but can be any string. See guide. - #[serde(rename = "volume")] - #[serde(skip_serializing_if = "Option::is_none")] - pub volume: Option<String>, - - /// Issue number of volume/container that this release was published in. Sometimes coresponds to a month number in the year, but can be any string. See guide. - #[serde(rename = "issue")] - #[serde(skip_serializing_if = "Option::is_none")] - pub issue: Option<String>, - - /// Either a single page number (\"first page\") or a range of pages separated by a dash (\"-\"). See guide for details. - #[serde(rename = "pages")] - #[serde(skip_serializing_if = "Option::is_none")] - pub pages: Option<String>, - - /// For, eg, technical reports, which are published in series or assigned some other institutional or container-specific identifier. - #[serde(rename = "number")] - #[serde(skip_serializing_if = "Option::is_none")] - pub number: Option<String>, - - /// For, eg, updated technical reports or software packages, where the version string may be the only field disambiguating between releases. - #[serde(rename = "version")] - #[serde(skip_serializing_if = "Option::is_none")] - pub version: Option<String>, - - /// Name, usually English, of the entity or institution responsible for publication of this release. Not necessarily the imprint/brand. See guide. - #[serde(rename = "publisher")] - #[serde(skip_serializing_if = "Option::is_none")] - pub publisher: Option<String>, - - /// Primary language of the content of the full release. Two-letter RFC1766/ISO639-1 language code, with some custom extensions/additions. See guide. - #[serde(rename = "language")] - #[serde(skip_serializing_if = "Option::is_none")] - pub language: Option<String>, - - /// Short string (slug) name of license under which release is openly published (if applicable). - #[serde(rename = "license_slug")] - #[serde(skip_serializing_if = "Option::is_none")] - pub license_slug: Option<String>, - - #[serde(rename = "contribs")] - #[serde(skip_serializing_if = "Option::is_none")] - pub contribs: Option<Vec<models::ReleaseContrib>>, - - #[serde(rename = "refs")] - #[serde(skip_serializing_if = "Option::is_none")] - pub refs: Option<Vec<models::ReleaseRef>>, - - #[serde(rename = "abstracts")] - #[serde(skip_serializing_if = "Option::is_none")] - pub abstracts: Option<Vec<models::ReleaseAbstract>>, -} - -impl ReleaseEntity { - pub fn new(ext_ids: models::ReleaseExtIds) -> ReleaseEntity { - ReleaseEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - title: None, - subtitle: None, - original_title: None, - work_id: None, - container: None, - files: None, - filesets: None, - webcaptures: None, - container_id: None, - release_type: None, - release_stage: None, - release_date: None, - release_year: None, - withdrawn_status: None, - withdrawn_date: None, - withdrawn_year: None, - ext_ids: ext_ids, - volume: None, - issue: None, - pages: None, - number: None, - version: None, - publisher: None, - language: None, - license_slug: None, - contribs: None, - refs: None, - abstracts: None, - } - } -} - -/// Converts the ReleaseEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ReleaseEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - if let Some(ref title) = self.title { - params.push("title".to_string()); - params.push(title.to_string()); - } - - if let Some(ref subtitle) = self.subtitle { - params.push("subtitle".to_string()); - params.push(subtitle.to_string()); - } - - if let Some(ref original_title) = self.original_title { - params.push("original_title".to_string()); - params.push(original_title.to_string()); - } - - if let Some(ref work_id) = self.work_id { - params.push("work_id".to_string()); - params.push(work_id.to_string()); - } - - // Skipping container in query parameter serialization - - // Skipping files in query parameter serialization - - // Skipping filesets in query parameter serialization - - // Skipping webcaptures in query parameter serialization - - if let Some(ref container_id) = self.container_id { - params.push("container_id".to_string()); - params.push(container_id.to_string()); - } - - if let Some(ref release_type) = self.release_type { - params.push("release_type".to_string()); - params.push(release_type.to_string()); - } - - if let Some(ref release_stage) = self.release_stage { - params.push("release_stage".to_string()); - params.push(release_stage.to_string()); - } - - // Skipping release_date in query parameter serialization - - if let Some(ref release_year) = self.release_year { - params.push("release_year".to_string()); - params.push(release_year.to_string()); - } - - if let Some(ref withdrawn_status) = self.withdrawn_status { - params.push("withdrawn_status".to_string()); - params.push(withdrawn_status.to_string()); - } - - // Skipping withdrawn_date in query parameter serialization - - if let Some(ref withdrawn_year) = self.withdrawn_year { - params.push("withdrawn_year".to_string()); - params.push(withdrawn_year.to_string()); - } - - // Skipping ext_ids in query parameter serialization - - if let Some(ref volume) = self.volume { - params.push("volume".to_string()); - params.push(volume.to_string()); - } - - if let Some(ref issue) = self.issue { - params.push("issue".to_string()); - params.push(issue.to_string()); - } - - if let Some(ref pages) = self.pages { - params.push("pages".to_string()); - params.push(pages.to_string()); - } - - if let Some(ref number) = self.number { - params.push("number".to_string()); - params.push(number.to_string()); - } - - if let Some(ref version) = self.version { - params.push("version".to_string()); - params.push(version.to_string()); - } - - if let Some(ref publisher) = self.publisher { - params.push("publisher".to_string()); - params.push(publisher.to_string()); - } - - if let Some(ref language) = self.language { - params.push("language".to_string()); - params.push(language.to_string()); - } - - if let Some(ref license_slug) = self.license_slug { - params.push("license_slug".to_string()); - params.push(license_slug.to_string()); - } - - // Skipping contribs in query parameter serialization - - // Skipping refs in query parameter serialization - - // Skipping abstracts in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ReleaseEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ReleaseEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub title: Vec<String>, - pub subtitle: Vec<String>, - pub original_title: Vec<String>, - pub work_id: Vec<String>, - pub container: Vec<models::ContainerEntity>, - pub files: Vec<Vec<models::FileEntity>>, - pub filesets: Vec<Vec<models::FilesetEntity>>, - pub webcaptures: Vec<Vec<models::WebcaptureEntity>>, - pub container_id: Vec<String>, - pub release_type: Vec<String>, - pub release_stage: Vec<String>, - pub release_date: Vec<chrono::NaiveDate>, - pub release_year: Vec<i64>, - pub withdrawn_status: Vec<String>, - pub withdrawn_date: Vec<chrono::NaiveDate>, - pub withdrawn_year: Vec<i64>, - pub ext_ids: Vec<models::ReleaseExtIds>, - pub volume: Vec<String>, - pub issue: Vec<String>, - pub pages: Vec<String>, - pub number: Vec<String>, - pub version: Vec<String>, - pub publisher: Vec<String>, - pub language: Vec<String>, - pub license_slug: Vec<String>, - pub contribs: Vec<Vec<models::ReleaseContrib>>, - pub refs: Vec<Vec<models::ReleaseRef>>, - pub abstracts: Vec<Vec<models::ReleaseAbstract>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ReleaseEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 ReleaseEntity" - .to_string(), - ) - } - "edit_extra" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - "title" => intermediate_rep - .title - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "subtitle" => intermediate_rep - .subtitle - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "original_title" => intermediate_rep - .original_title - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "work_id" => intermediate_rep - .work_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "container" => intermediate_rep.container.push( - models::ContainerEntity::from_str(val).map_err(|x| format!("{}", x))?, - ), - "files" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - "filesets" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - "webcaptures" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - "container_id" => intermediate_rep - .container_id - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "release_type" => intermediate_rep - .release_type - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "release_stage" => intermediate_rep - .release_stage - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "release_date" => intermediate_rep - .release_date - .push(chrono::NaiveDate::from_str(val).map_err(|x| format!("{}", x))?), - "release_year" => intermediate_rep - .release_year - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "withdrawn_status" => intermediate_rep - .withdrawn_status - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "withdrawn_date" => intermediate_rep - .withdrawn_date - .push(chrono::NaiveDate::from_str(val).map_err(|x| format!("{}", x))?), - "withdrawn_year" => intermediate_rep - .withdrawn_year - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "ext_ids" => intermediate_rep - .ext_ids - .push(models::ReleaseExtIds::from_str(val).map_err(|x| format!("{}", x))?), - "volume" => intermediate_rep - .volume - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "issue" => intermediate_rep - .issue - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "pages" => intermediate_rep - .pages - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "number" => intermediate_rep - .number - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "version" => intermediate_rep - .version - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "publisher" => intermediate_rep - .publisher - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "language" => intermediate_rep - .language - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "license_slug" => intermediate_rep - .license_slug - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "contribs" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - "refs" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - "abstracts" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in ReleaseEntity" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ReleaseEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ReleaseEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - edit_extra: intermediate_rep.edit_extra.into_iter().next(), - title: intermediate_rep.title.into_iter().next(), - subtitle: intermediate_rep.subtitle.into_iter().next(), - original_title: intermediate_rep.original_title.into_iter().next(), - work_id: intermediate_rep.work_id.into_iter().next(), - container: intermediate_rep.container.into_iter().next(), - files: intermediate_rep.files.into_iter().next(), - filesets: intermediate_rep.filesets.into_iter().next(), - webcaptures: intermediate_rep.webcaptures.into_iter().next(), - container_id: intermediate_rep.container_id.into_iter().next(), - release_type: intermediate_rep.release_type.into_iter().next(), - release_stage: intermediate_rep.release_stage.into_iter().next(), - release_date: intermediate_rep.release_date.into_iter().next(), - release_year: intermediate_rep.release_year.into_iter().next(), - withdrawn_status: intermediate_rep.withdrawn_status.into_iter().next(), - withdrawn_date: intermediate_rep.withdrawn_date.into_iter().next(), - withdrawn_year: intermediate_rep.withdrawn_year.into_iter().next(), - ext_ids: intermediate_rep - .ext_ids - .into_iter() - .next() - .ok_or("ext_ids missing in ReleaseEntity".to_string())?, - volume: intermediate_rep.volume.into_iter().next(), - issue: intermediate_rep.issue.into_iter().next(), - pages: intermediate_rep.pages.into_iter().next(), - number: intermediate_rep.number.into_iter().next(), - version: intermediate_rep.version.into_iter().next(), - publisher: intermediate_rep.publisher.into_iter().next(), - language: intermediate_rep.language.into_iter().next(), - license_slug: intermediate_rep.license_slug.into_iter().next(), - contribs: intermediate_rep.contribs.into_iter().next(), - refs: intermediate_rep.refs.into_iter().next(), - abstracts: intermediate_rep.abstracts.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ReleaseExtIds> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ReleaseExtIds>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ReleaseExtIds>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ReleaseExtIds - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<ReleaseExtIds> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ReleaseExtIds as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ReleaseExtIds - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ReleaseExtIds { - /// Digital Object Identifier (DOI), mostly for published papers and datasets. Should be registered and resolvable via https://doi.org/ - #[serde(rename = "doi")] - #[serde(skip_serializing_if = "Option::is_none")] - pub doi: Option<String>, - - /// Wikidata entity QID - #[serde(rename = "wikidata_qid")] - #[serde(skip_serializing_if = "Option::is_none")] - pub wikidata_qid: Option<String>, - - /// ISBN-13, for books. Usually not set for chapters. ISBN-10 should be converted to ISBN-13. - #[serde(rename = "isbn13")] - #[serde(skip_serializing_if = "Option::is_none")] - pub isbn13: Option<String>, - - /// PubMed Identifier - #[serde(rename = "pmid")] - #[serde(skip_serializing_if = "Option::is_none")] - pub pmid: Option<String>, - - /// PubMed Central Identifier - #[serde(rename = "pmcid")] - #[serde(skip_serializing_if = "Option::is_none")] - pub pmcid: Option<String>, - - /// CORE (https://core.ac.uk) identifier - #[serde(rename = "core")] - #[serde(skip_serializing_if = "Option::is_none")] - pub core: Option<String>, - - /// arXiv (https://arxiv.org) identifier; must include version - #[serde(rename = "arxiv")] - #[serde(skip_serializing_if = "Option::is_none")] - pub arxiv: Option<String>, - - /// JSTOR work identifier - #[serde(rename = "jstor")] - #[serde(skip_serializing_if = "Option::is_none")] - pub jstor: Option<String>, - - /// ARK identifier - #[serde(rename = "ark")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ark: Option<String>, - - /// Microsoft Academic Graph identifier - #[serde(rename = "mag")] - #[serde(skip_serializing_if = "Option::is_none")] - pub mag: Option<String>, - - /// DOAJ article-level identifier - #[serde(rename = "doaj")] - #[serde(skip_serializing_if = "Option::is_none")] - pub doaj: Option<String>, - - /// dblp (https://dblp.uni-trier.de/) paper identifier; eg for conference proceedings - #[serde(rename = "dblp")] - #[serde(skip_serializing_if = "Option::is_none")] - pub dblp: Option<String>, - - /// OAI-PMH identifier; only used when an OAI-PMH record is the only authoritative metadata (eg, journal OAI-PMH feeds w/o DOIs) - #[serde(rename = "oai")] - #[serde(skip_serializing_if = "Option::is_none")] - pub oai: Option<String>, -} - -impl ReleaseExtIds { - pub fn new() -> ReleaseExtIds { - ReleaseExtIds { - doi: None, - wikidata_qid: None, - isbn13: None, - pmid: None, - pmcid: None, - core: None, - arxiv: None, - jstor: None, - ark: None, - mag: None, - doaj: None, - dblp: None, - oai: None, - } - } -} - -/// Converts the ReleaseExtIds value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ReleaseExtIds { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref doi) = self.doi { - params.push("doi".to_string()); - params.push(doi.to_string()); - } - - if let Some(ref wikidata_qid) = self.wikidata_qid { - params.push("wikidata_qid".to_string()); - params.push(wikidata_qid.to_string()); - } - - if let Some(ref isbn13) = self.isbn13 { - params.push("isbn13".to_string()); - params.push(isbn13.to_string()); - } - - if let Some(ref pmid) = self.pmid { - params.push("pmid".to_string()); - params.push(pmid.to_string()); - } - - if let Some(ref pmcid) = self.pmcid { - params.push("pmcid".to_string()); - params.push(pmcid.to_string()); - } - - if let Some(ref core) = self.core { - params.push("core".to_string()); - params.push(core.to_string()); - } - - if let Some(ref arxiv) = self.arxiv { - params.push("arxiv".to_string()); - params.push(arxiv.to_string()); - } - - if let Some(ref jstor) = self.jstor { - params.push("jstor".to_string()); - params.push(jstor.to_string()); - } - - if let Some(ref ark) = self.ark { - params.push("ark".to_string()); - params.push(ark.to_string()); - } - - if let Some(ref mag) = self.mag { - params.push("mag".to_string()); - params.push(mag.to_string()); - } - - if let Some(ref doaj) = self.doaj { - params.push("doaj".to_string()); - params.push(doaj.to_string()); - } - - if let Some(ref dblp) = self.dblp { - params.push("dblp".to_string()); - params.push(dblp.to_string()); - } - - if let Some(ref oai) = self.oai { - params.push("oai".to_string()); - params.push(oai.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ReleaseExtIds value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ReleaseExtIds { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub doi: Vec<String>, - pub wikidata_qid: Vec<String>, - pub isbn13: Vec<String>, - pub pmid: Vec<String>, - pub pmcid: Vec<String>, - pub core: Vec<String>, - pub arxiv: Vec<String>, - pub jstor: Vec<String>, - pub ark: Vec<String>, - pub mag: Vec<String>, - pub doaj: Vec<String>, - pub dblp: Vec<String>, - pub oai: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ReleaseExtIds".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "doi" => intermediate_rep - .doi - .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))?), - "isbn13" => intermediate_rep - .isbn13 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "pmid" => intermediate_rep - .pmid - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "pmcid" => intermediate_rep - .pmcid - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "core" => intermediate_rep - .core - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "arxiv" => intermediate_rep - .arxiv - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "jstor" => intermediate_rep - .jstor - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ark" => intermediate_rep - .ark - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "mag" => intermediate_rep - .mag - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "doaj" => intermediate_rep - .doaj - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "dblp" => intermediate_rep - .dblp - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "oai" => intermediate_rep - .oai - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ReleaseExtIds".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ReleaseExtIds { - doi: intermediate_rep.doi.into_iter().next(), - wikidata_qid: intermediate_rep.wikidata_qid.into_iter().next(), - isbn13: intermediate_rep.isbn13.into_iter().next(), - pmid: intermediate_rep.pmid.into_iter().next(), - pmcid: intermediate_rep.pmcid.into_iter().next(), - core: intermediate_rep.core.into_iter().next(), - arxiv: intermediate_rep.arxiv.into_iter().next(), - jstor: intermediate_rep.jstor.into_iter().next(), - ark: intermediate_rep.ark.into_iter().next(), - mag: intermediate_rep.mag.into_iter().next(), - doaj: intermediate_rep.doaj.into_iter().next(), - dblp: intermediate_rep.dblp.into_iter().next(), - oai: intermediate_rep.oai.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<ReleaseRef> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<ReleaseRef>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<ReleaseRef>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for ReleaseRef - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<ReleaseRef> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <ReleaseRef as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into ReleaseRef - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ReleaseRef { - /// Zero-indexed sequence number of this reference in the list of references. Assigned automatically and used internally; don't confuse with `key`. - #[serde(rename = "index")] - #[serde(skip_serializing_if = "Option::is_none")] - pub index: Option<i64>, - - /// Optional, fatcat identifier of release entity that this reference is citing. - #[serde(rename = "target_release_id")] - #[serde(skip_serializing_if = "Option::is_none")] - pub target_release_id: Option<String>, - - /// Additional free-form JSON metadata about this citation. Generally follows Citation Style Language (CSL) JSON schema. See guide for details. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Short string used to indicate this reference from within the release text; or numbering of references as typeset in the release itself. Optional; don't confuse with `index` field. - #[serde(rename = "key")] - #[serde(skip_serializing_if = "Option::is_none")] - pub key: Option<String>, - - /// Year that the cited work was published in. - #[serde(rename = "year")] - #[serde(skip_serializing_if = "Option::is_none")] - pub year: Option<i64>, - - /// Name of the container (eg, journal) that the citation work was published as part of. May be an acronym or full name. - #[serde(rename = "container_name")] - #[serde(skip_serializing_if = "Option::is_none")] - pub container_name: Option<String>, - - /// Name of the work being cited. - #[serde(rename = "title")] - #[serde(skip_serializing_if = "Option::is_none")] - pub title: Option<String>, - - /// Page number or other indicator of the specific subset of a work being cited. Not to be confused with the first page (or page range) of an entire paper or chapter being cited. - #[serde(rename = "locator")] - #[serde(skip_serializing_if = "Option::is_none")] - pub locator: Option<String>, -} - -impl ReleaseRef { - pub fn new() -> ReleaseRef { - ReleaseRef { - index: None, - target_release_id: None, - extra: None, - key: None, - year: None, - container_name: None, - title: None, - locator: None, - } - } -} - -/// Converts the ReleaseRef value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for ReleaseRef { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref index) = self.index { - params.push("index".to_string()); - params.push(index.to_string()); - } - - if let Some(ref target_release_id) = self.target_release_id { - params.push("target_release_id".to_string()); - params.push(target_release_id.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - if let Some(ref key) = self.key { - params.push("key".to_string()); - params.push(key.to_string()); - } - - if let Some(ref year) = self.year { - params.push("year".to_string()); - params.push(year.to_string()); - } - - if let Some(ref container_name) = self.container_name { - params.push("container_name".to_string()); - params.push(container_name.to_string()); - } - - if let Some(ref title) = self.title { - params.push("title".to_string()); - params.push(title.to_string()); - } - - if let Some(ref locator) = self.locator { - params.push("locator".to_string()); - params.push(locator.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a ReleaseRef value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for ReleaseRef { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub index: Vec<i64>, - pub target_release_id: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub key: Vec<String>, - pub year: Vec<i64>, - pub container_name: Vec<String>, - pub title: Vec<String>, - pub locator: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing ReleaseRef".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "index" => intermediate_rep - .index - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "target_release_id" => intermediate_rep - .target_release_id - .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 ReleaseRef" - .to_string(), - ) - } - "key" => intermediate_rep - .key - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "year" => intermediate_rep - .year - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "container_name" => intermediate_rep - .container_name - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "title" => intermediate_rep - .title - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "locator" => intermediate_rep - .locator - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing ReleaseRef".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(ReleaseRef { - index: intermediate_rep.index.into_iter().next(), - target_release_id: intermediate_rep.target_release_id.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - key: intermediate_rep.key.into_iter().next(), - year: intermediate_rep.year.into_iter().next(), - container_name: intermediate_rep.container_name.into_iter().next(), - title: intermediate_rep.title.into_iter().next(), - locator: intermediate_rep.locator.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<Success> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<Success>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<Success>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for Success - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<Success> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <Success as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into Success - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Success { - #[serde(rename = "success")] - pub success: bool, - - #[serde(rename = "message")] - pub message: String, -} - -impl Success { - pub fn new(success: bool, message: String) -> Success { - Success { - success: success, - message: message, - } - } -} - -/// Converts the Success value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for Success { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("success".to_string()); - params.push(self.success.to_string()); - - params.push("message".to_string()); - params.push(self.message.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a Success value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for Success { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub success: Vec<bool>, - pub message: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing Success".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "success" => intermediate_rep - .success - .push(bool::from_str(val).map_err(|x| format!("{}", x))?), - "message" => intermediate_rep - .message - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing Success".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(Success { - success: intermediate_rep - .success - .into_iter() - .next() - .ok_or("success missing in Success".to_string())?, - message: intermediate_rep - .message - .into_iter() - .next() - .ok_or("message missing in Success".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<WebcaptureAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<WebcaptureAutoBatch>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<WebcaptureAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for WebcaptureAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<WebcaptureAutoBatch> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <WebcaptureAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into WebcaptureAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct WebcaptureAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::WebcaptureEntity>, -} - -impl WebcaptureAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::WebcaptureEntity>, - ) -> WebcaptureAutoBatch { - WebcaptureAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the WebcaptureAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for WebcaptureAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a WebcaptureAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for WebcaptureAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::WebcaptureEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing WebcaptureAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => return std::result::Result::Err( - "Parsing a container in this style is not supported in WebcaptureAutoBatch" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing WebcaptureAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(WebcaptureAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in WebcaptureAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in WebcaptureAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<WebcaptureCdxLine> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<WebcaptureCdxLine>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<WebcaptureCdxLine>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for WebcaptureCdxLine - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<WebcaptureCdxLine> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <WebcaptureCdxLine as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into WebcaptureCdxLine - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct WebcaptureCdxLine { - /// \"Sortable URL\" format. See guide for details. - #[serde(rename = "surt")] - pub surt: String, - - /// Date and time of capture, in ISO format. UTC, 'Z'-terminated, second (or better) precision. - #[serde(rename = "timestamp")] - pub timestamp: chrono::DateTime<chrono::Utc>, - - /// Full URL/URI of resource captured. - #[serde(rename = "url")] - pub url: String, - - /// Mimetype of the resource at this URL. May be the Content-Type header, or the actually sniffed file type. - #[serde(rename = "mimetype")] - #[serde(skip_serializing_if = "Option::is_none")] - pub mimetype: Option<String>, - - /// HTTP status code. Should generally be 200, especially for the primary resource, but may be 3xx (redirect) or even error codes if embedded resources can not be fetched successfully. - #[serde(rename = "status_code")] - #[serde(skip_serializing_if = "Option::is_none")] - pub status_code: Option<i64>, - - /// Resource (file) size in bytes - #[serde(rename = "size")] - #[serde(skip_serializing_if = "Option::is_none")] - pub size: Option<i64>, - - /// SHA-1 hash of data, in hex encoding - #[serde(rename = "sha1")] - pub sha1: String, - - /// SHA-256 hash of data, in hex encoding - #[serde(rename = "sha256")] - #[serde(skip_serializing_if = "Option::is_none")] - pub sha256: Option<String>, -} - -impl WebcaptureCdxLine { - pub fn new( - surt: String, - timestamp: chrono::DateTime<chrono::Utc>, - url: String, - sha1: String, - ) -> WebcaptureCdxLine { - WebcaptureCdxLine { - surt: surt, - timestamp: timestamp, - url: url, - mimetype: None, - status_code: None, - size: None, - sha1: sha1, - sha256: None, - } - } -} - -/// Converts the WebcaptureCdxLine value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for WebcaptureCdxLine { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("surt".to_string()); - params.push(self.surt.to_string()); - - // Skipping timestamp in query parameter serialization - - params.push("url".to_string()); - params.push(self.url.to_string()); - - if let Some(ref mimetype) = self.mimetype { - params.push("mimetype".to_string()); - params.push(mimetype.to_string()); - } - - if let Some(ref status_code) = self.status_code { - params.push("status_code".to_string()); - params.push(status_code.to_string()); - } - - if let Some(ref size) = self.size { - params.push("size".to_string()); - params.push(size.to_string()); - } - - params.push("sha1".to_string()); - params.push(self.sha1.to_string()); - - if let Some(ref sha256) = self.sha256 { - params.push("sha256".to_string()); - params.push(sha256.to_string()); - } - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a WebcaptureCdxLine value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for WebcaptureCdxLine { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub surt: Vec<String>, - pub timestamp: Vec<chrono::DateTime<chrono::Utc>>, - pub url: Vec<String>, - pub mimetype: Vec<String>, - pub status_code: Vec<i64>, - pub size: Vec<i64>, - pub sha1: Vec<String>, - pub sha256: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing WebcaptureCdxLine".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "surt" => intermediate_rep - .surt - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "timestamp" => intermediate_rep.timestamp.push( - chrono::DateTime::<chrono::Utc>::from_str(val) - .map_err(|x| format!("{}", x))?, - ), - "url" => intermediate_rep - .url - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "mimetype" => intermediate_rep - .mimetype - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "status_code" => intermediate_rep - .status_code - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "size" => intermediate_rep - .size - .push(i64::from_str(val).map_err(|x| format!("{}", x))?), - "sha1" => intermediate_rep - .sha1 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "sha256" => intermediate_rep - .sha256 - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing WebcaptureCdxLine".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(WebcaptureCdxLine { - surt: intermediate_rep - .surt - .into_iter() - .next() - .ok_or("surt missing in WebcaptureCdxLine".to_string())?, - timestamp: intermediate_rep - .timestamp - .into_iter() - .next() - .ok_or("timestamp missing in WebcaptureCdxLine".to_string())?, - url: intermediate_rep - .url - .into_iter() - .next() - .ok_or("url missing in WebcaptureCdxLine".to_string())?, - mimetype: intermediate_rep.mimetype.into_iter().next(), - status_code: intermediate_rep.status_code.into_iter().next(), - size: intermediate_rep.size.into_iter().next(), - sha1: intermediate_rep - .sha1 - .into_iter() - .next() - .ok_or("sha1 missing in WebcaptureCdxLine".to_string())?, - sha256: intermediate_rep.sha256.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<WebcaptureEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<WebcaptureEntity>> - for hyper::header::HeaderValue -{ - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<WebcaptureEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for WebcaptureEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> - for header::IntoHeaderValue<WebcaptureEntity> -{ - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <WebcaptureEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into WebcaptureEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct WebcaptureEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - #[serde(rename = "cdx")] - #[serde(skip_serializing_if = "Option::is_none")] - pub cdx: Option<Vec<models::WebcaptureCdxLine>>, - - #[serde(rename = "archive_urls")] - #[serde(skip_serializing_if = "Option::is_none")] - pub archive_urls: Option<Vec<models::WebcaptureUrl>>, - - /// Base URL of the primary resource this is a capture of - #[serde(rename = "original_url")] - #[serde(skip_serializing_if = "Option::is_none")] - pub original_url: Option<String>, - - /// Same format as CDX line timestamp (UTC, etc). Corresponds to the overall capture timestamp. Should generally be the timestamp of capture of the primary resource URL. - #[serde(rename = "timestamp")] - #[serde(skip_serializing_if = "Option::is_none")] - pub timestamp: Option<chrono::DateTime<chrono::Utc>>, - - /// Set of identifier of release entities this fileset represents a full manifestation of. Usually a single release. - #[serde(rename = "release_ids")] - #[serde(skip_serializing_if = "Option::is_none")] - pub release_ids: Option<Vec<String>>, - - /// Full release entities, included in GET responses when `releases` included in `expand` parameter. Ignored if included in PUT or POST requests. - #[serde(rename = "releases")] - #[serde(skip_serializing_if = "Option::is_none")] - pub releases: Option<Vec<models::ReleaseEntity>>, -} - -impl WebcaptureEntity { - pub fn new() -> WebcaptureEntity { - WebcaptureEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - cdx: None, - archive_urls: None, - original_url: None, - timestamp: None, - release_ids: None, - releases: None, - } - } -} - -/// Converts the WebcaptureEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for WebcaptureEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - // Skipping cdx in query parameter serialization - - // Skipping archive_urls in query parameter serialization - - if let Some(ref original_url) = self.original_url { - params.push("original_url".to_string()); - params.push(original_url.to_string()); - } - - // Skipping timestamp in query parameter serialization - - if let Some(ref release_ids) = self.release_ids { - params.push("release_ids".to_string()); - params.push( - release_ids - .iter() - .map(|x| x.to_string()) - .collect::<Vec<_>>() - .join(",") - .to_string(), - ); - } - - // Skipping releases in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a WebcaptureEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for WebcaptureEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub cdx: Vec<Vec<models::WebcaptureCdxLine>>, - pub archive_urls: Vec<Vec<models::WebcaptureUrl>>, - pub original_url: Vec<String>, - pub timestamp: Vec<chrono::DateTime<chrono::Utc>>, - pub release_ids: Vec<Vec<String>>, - pub releases: Vec<Vec<models::ReleaseEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing WebcaptureEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 WebcaptureEntity" - .to_string(), - ), - "edit_extra" => return std::result::Result::Err( - "Parsing a container in this style is not supported in WebcaptureEntity" - .to_string(), - ), - "cdx" => return std::result::Result::Err( - "Parsing a container in this style is not supported in WebcaptureEntity" - .to_string(), - ), - "archive_urls" => return std::result::Result::Err( - "Parsing a container in this style is not supported in WebcaptureEntity" - .to_string(), - ), - "original_url" => intermediate_rep - .original_url - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "timestamp" => intermediate_rep.timestamp.push( - chrono::DateTime::<chrono::Utc>::from_str(val) - .map_err(|x| format!("{}", x))?, - ), - "release_ids" => return std::result::Result::Err( - "Parsing a container in this style is not supported in WebcaptureEntity" - .to_string(), - ), - "releases" => return std::result::Result::Err( - "Parsing a container in this style is not supported in WebcaptureEntity" - .to_string(), - ), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing WebcaptureEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(WebcaptureEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - edit_extra: intermediate_rep.edit_extra.into_iter().next(), - cdx: intermediate_rep.cdx.into_iter().next(), - archive_urls: intermediate_rep.archive_urls.into_iter().next(), - original_url: intermediate_rep.original_url.into_iter().next(), - timestamp: intermediate_rep.timestamp.into_iter().next(), - release_ids: intermediate_rep.release_ids.into_iter().next(), - releases: intermediate_rep.releases.into_iter().next(), - }) - } -} - -// Methods for converting between header::IntoHeaderValue<WebcaptureUrl> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<WebcaptureUrl>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<WebcaptureUrl>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for WebcaptureUrl - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<WebcaptureUrl> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <WebcaptureUrl as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into WebcaptureUrl - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct WebcaptureUrl { - /// URL/URI pointing to archive of this web resource. - #[serde(rename = "url")] - pub url: String, - - /// Type of archive endpoint. Usually `wayback` (WBM replay of primary resource), or `warc` (direct URL to a WARC file containing all resources of the capture). See guide for full list. - #[serde(rename = "rel")] - pub rel: String, -} - -impl WebcaptureUrl { - pub fn new(url: String, rel: String) -> WebcaptureUrl { - WebcaptureUrl { url: url, rel: rel } - } -} - -/// Converts the WebcaptureUrl value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for WebcaptureUrl { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - params.push("url".to_string()); - params.push(self.url.to_string()); - - params.push("rel".to_string()); - params.push(self.rel.to_string()); - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a WebcaptureUrl value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for WebcaptureUrl { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub url: Vec<String>, - pub rel: Vec<String>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing WebcaptureUrl".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "url" => intermediate_rep - .url - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "rel" => intermediate_rep - .rel - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - _ => { - return std::result::Result::Err( - "Unexpected key while parsing WebcaptureUrl".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(WebcaptureUrl { - url: intermediate_rep - .url - .into_iter() - .next() - .ok_or("url missing in WebcaptureUrl".to_string())?, - rel: intermediate_rep - .rel - .into_iter() - .next() - .ok_or("rel missing in WebcaptureUrl".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<WorkAutoBatch> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<WorkAutoBatch>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<WorkAutoBatch>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for WorkAutoBatch - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<WorkAutoBatch> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <WorkAutoBatch as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into WorkAutoBatch - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct WorkAutoBatch { - #[serde(rename = "editgroup")] - pub editgroup: models::Editgroup, - - #[serde(rename = "entity_list")] - pub entity_list: Vec<models::WorkEntity>, -} - -impl WorkAutoBatch { - pub fn new( - editgroup: models::Editgroup, - entity_list: Vec<models::WorkEntity>, - ) -> WorkAutoBatch { - WorkAutoBatch { - editgroup: editgroup, - entity_list: entity_list, - } - } -} - -/// Converts the WorkAutoBatch value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for WorkAutoBatch { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - // Skipping editgroup in query parameter serialization - - // Skipping entity_list in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a WorkAutoBatch value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for WorkAutoBatch { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub editgroup: Vec<models::Editgroup>, - pub entity_list: Vec<Vec<models::WorkEntity>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing WorkAutoBatch".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "editgroup" => intermediate_rep - .editgroup - .push(models::Editgroup::from_str(val).map_err(|x| format!("{}", x))?), - "entity_list" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in WorkAutoBatch" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing WorkAutoBatch".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(WorkAutoBatch { - editgroup: intermediate_rep - .editgroup - .into_iter() - .next() - .ok_or("editgroup missing in WorkAutoBatch".to_string())?, - entity_list: intermediate_rep - .entity_list - .into_iter() - .next() - .ok_or("entity_list missing in WorkAutoBatch".to_string())?, - }) - } -} - -// Methods for converting between header::IntoHeaderValue<WorkEntity> and hyper::header::HeaderValue - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<header::IntoHeaderValue<WorkEntity>> for hyper::header::HeaderValue { - type Error = String; - - fn try_from( - hdr_value: header::IntoHeaderValue<WorkEntity>, - ) -> std::result::Result<Self, Self::Error> { - let hdr_value = hdr_value.to_string(); - match hyper::header::HeaderValue::from_str(&hdr_value) { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Invalid header value for WorkEntity - value: {} is invalid {}", - hdr_value, e - )), - } - } -} - -#[cfg(any(feature = "client", feature = "server"))] -impl std::convert::TryFrom<hyper::header::HeaderValue> for header::IntoHeaderValue<WorkEntity> { - type Error = String; - - fn try_from(hdr_value: hyper::header::HeaderValue) -> std::result::Result<Self, Self::Error> { - match hdr_value.to_str() { - std::result::Result::Ok(value) => { - match <WorkEntity as std::str::FromStr>::from_str(value) { - std::result::Result::Ok(value) => { - std::result::Result::Ok(header::IntoHeaderValue(value)) - } - std::result::Result::Err(err) => std::result::Result::Err(format!( - "Unable to convert header value '{}' into WorkEntity - {}", - value, err - )), - } - } - std::result::Result::Err(e) => std::result::Result::Err(format!( - "Unable to convert header: {:?} to string: {}", - hdr_value, e - )), - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct WorkEntity { - // Note: inline enums are not fully supported by openapi-generator - #[serde(rename = "state")] - #[serde(skip_serializing_if = "Option::is_none")] - pub state: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "ident")] - #[serde(skip_serializing_if = "Option::is_none")] - pub ident: Option<String>, - - /// UUID (lower-case, dash-separated, hex-encoded 128-bit) - #[serde(rename = "revision")] - #[serde(skip_serializing_if = "Option::is_none")] - pub revision: Option<String>, - - /// base32-encoded unique identifier - #[serde(rename = "redirect")] - #[serde(skip_serializing_if = "Option::is_none")] - pub redirect: Option<String>, - - /// Free-form JSON metadata that will be stored with the other entity metadata. See guide for (unenforced) schema conventions. - #[serde(rename = "extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub extra: Option<std::collections::HashMap<String, serde_json::Value>>, - - /// Free-form JSON metadata that will be stored with specific entity edits (eg, creation/update/delete). - #[serde(rename = "edit_extra")] - #[serde(skip_serializing_if = "Option::is_none")] - pub edit_extra: Option<std::collections::HashMap<String, serde_json::Value>>, -} - -impl WorkEntity { - pub fn new() -> WorkEntity { - WorkEntity { - state: None, - ident: None, - revision: None, - redirect: None, - extra: None, - edit_extra: None, - } - } -} - -/// Converts the WorkEntity value to the Query Parameters representation (style=form, explode=false) -/// specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde serializer -impl std::string::ToString for WorkEntity { - fn to_string(&self) -> String { - let mut params: Vec<String> = vec![]; - - if let Some(ref state) = self.state { - params.push("state".to_string()); - params.push(state.to_string()); - } - - if let Some(ref ident) = self.ident { - params.push("ident".to_string()); - params.push(ident.to_string()); - } - - if let Some(ref revision) = self.revision { - params.push("revision".to_string()); - params.push(revision.to_string()); - } - - if let Some(ref redirect) = self.redirect { - params.push("redirect".to_string()); - params.push(redirect.to_string()); - } - - // Skipping extra in query parameter serialization - // Skipping extra in query parameter serialization - - // Skipping edit_extra in query parameter serialization - // Skipping edit_extra in query parameter serialization - - params.join(",").to_string() - } -} - -/// Converts Query Parameters representation (style=form, explode=false) to a WorkEntity value -/// as specified in https://swagger.io/docs/specification/serialization/ -/// Should be implemented in a serde deserializer -impl std::str::FromStr for WorkEntity { - type Err = String; - - fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { - #[derive(Default)] - // An intermediate representation of the struct to use for parsing. - struct IntermediateRep { - pub state: Vec<String>, - pub ident: Vec<String>, - pub revision: Vec<String>, - pub redirect: Vec<String>, - pub extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - pub edit_extra: Vec<std::collections::HashMap<String, serde_json::Value>>, - } - - let mut intermediate_rep = IntermediateRep::default(); - - // Parse into intermediate representation - let mut string_iter = s.split(',').into_iter(); - let mut key_result = string_iter.next(); - - while key_result.is_some() { - let val = match string_iter.next() { - Some(x) => x, - None => { - return std::result::Result::Err( - "Missing value while parsing WorkEntity".to_string(), - ) - } - }; - - if let Some(key) = key_result { - match key { - "state" => intermediate_rep - .state - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "ident" => intermediate_rep - .ident - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "revision" => intermediate_rep - .revision - .push(String::from_str(val).map_err(|x| format!("{}", x))?), - "redirect" => intermediate_rep - .redirect - .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 WorkEntity" - .to_string(), - ) - } - "edit_extra" => { - return std::result::Result::Err( - "Parsing a container in this style is not supported in WorkEntity" - .to_string(), - ) - } - _ => { - return std::result::Result::Err( - "Unexpected key while parsing WorkEntity".to_string(), - ) - } - } - } - - // Get the next key - key_result = string_iter.next(); - } - - // Use the intermediate representation to return the struct - std::result::Result::Ok(WorkEntity { - state: intermediate_rep.state.into_iter().next(), - ident: intermediate_rep.ident.into_iter().next(), - revision: intermediate_rep.revision.into_iter().next(), - redirect: intermediate_rep.redirect.into_iter().next(), - extra: intermediate_rep.extra.into_iter().next(), - edit_extra: intermediate_rep.edit_extra.into_iter().next(), - }) - } -} |