elasticsearch/src/params.rs (471 lines of code) (raw):

/* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ //! API parameters use core::fmt; use serde::{de, de::Visitor, Deserializer, Serializer}; // GENERATED-BEGIN:spec-params // Generated code - do not edit until the next GENERATED-END marker use serde::{Deserialize, Serialize}; #[doc = "The unit in which to display byte values"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Bytes { #[serde(rename = "b")] B, #[serde(rename = "k")] K, #[serde(rename = "kb")] Kb, #[serde(rename = "m")] M, #[serde(rename = "mb")] Mb, #[serde(rename = "g")] G, #[serde(rename = "gb")] Gb, #[serde(rename = "t")] T, #[serde(rename = "tb")] Tb, #[serde(rename = "p")] P, #[serde(rename = "pb")] Pb, } #[doc = "What to do when the delete by query hits version conflicts?"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Conflicts { #[serde(rename = "abort")] Abort, #[serde(rename = "proceed")] Proceed, } #[doc = "The default operator for query string query (AND or OR)"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum DefaultOperator { #[serde(rename = "AND")] And, #[serde(rename = "OR")] Or, } #[doc = "Whether to expand wildcard expression to concrete indices that are open, closed or both."] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum ExpandWildcards { #[serde(rename = "open")] Open, #[serde(rename = "closed")] Closed, #[serde(rename = "hidden")] Hidden, #[serde(rename = "none")] None, #[serde(rename = "all")] All, } #[doc = "Return only information on specified index features"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Features { #[serde(rename = "aliases")] Aliases, #[serde(rename = "mappings")] Mappings, #[serde(rename = "settings")] Settings, } #[doc = "Optional parameter to specify the high level file format"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Format { #[serde(rename = "ndjson")] Ndjson, #[serde(rename = "xml")] Xml, #[serde(rename = "delimited")] Delimited, #[serde(rename = "semi_structured_text")] SemiStructuredText, } #[doc = "Determines the geometry type for features in the aggs layer."] #[doc = "&nbsp;\n# Optional, experimental\nThis requires the `experimental-apis` feature. Can have breaking changes in future\nversions or might even be removed entirely.\n "] #[cfg(feature = "experimental-apis")] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum GridType { #[serde(rename = "grid")] Grid, #[serde(rename = "point")] Point, #[serde(rename = "centroid")] Centroid, } #[doc = "Group tasks by nodes or parent/child relationships"] #[doc = "&nbsp;\n# Optional, experimental\nThis requires the `experimental-apis` feature. Can have breaking changes in future\nversions or might even be removed entirely.\n "] #[cfg(feature = "experimental-apis")] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum GroupBy { #[serde(rename = "nodes")] Nodes, #[serde(rename = "parents")] Parents, #[serde(rename = "none")] None, } #[doc = "A health status (\"green\", \"yellow\", or \"red\" to filter only indices matching the specified health status"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Health { #[serde(rename = "green")] Green, #[serde(rename = "yellow")] Yellow, #[serde(rename = "red")] Red, } #[doc = "Specify the level of detail for returned information"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Level { #[serde(rename = "cluster")] Cluster, #[serde(rename = "indices")] Indices, #[serde(rename = "shards")] Shards, } #[doc = "REST method to check"] #[doc = "&nbsp;\n# Optional, experimental\nThis requires the `experimental-apis` feature. Can have breaking changes in future\nversions or might even be removed entirely.\n "] #[cfg(feature = "experimental-apis")] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Method { #[serde(rename = "GET")] Get, #[serde(rename = "HEAD")] Head, #[serde(rename = "POST")] Post, #[serde(rename = "PUT")] Put, #[serde(rename = "DELETE")] Delete, } #[doc = "Explicit operation type. Defaults to `index` for requests with an explicit document ID, and to `create`for requests without an explicit document ID"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum OpType { #[serde(rename = "index")] Index, #[serde(rename = "create")] Create, } #[doc = "Sort order"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Order { #[serde(rename = "asc")] Asc, #[serde(rename = "desc")] Desc, } #[doc = "If `true` (the default) then refresh the affected shards to make this operation visible to search, if `wait_for` then wait for a refresh to make this operation visible to search, if `false` then do nothing with refreshes."] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Refresh { #[serde(rename = "true")] True, #[serde(rename = "false")] False, #[serde(rename = "wait_for")] WaitFor, } #[doc = "Search operation type"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum SearchType { #[serde(rename = "query_then_fetch")] QueryThenFetch, #[serde(rename = "dfs_query_then_fetch")] DfsQueryThenFetch, } #[doc = "Allows setting a sort order for the result. Defaults to start_time"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Sort { #[serde(rename = "start_time")] StartTime, #[serde(rename = "duration")] Duration, #[serde(rename = "name")] Name, #[serde(rename = "repository")] Repository, #[serde(rename = "index_count")] IndexCount, #[serde(rename = "shard_count")] ShardCount, #[serde(rename = "failed_shard_count")] FailedShardCount, } #[doc = "Specify suggest mode"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum SuggestMode { #[serde(rename = "missing")] Missing, #[serde(rename = "popular")] Popular, #[serde(rename = "always")] Always, } #[doc = "The unit in which to display time values"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Time { #[serde(rename = "d")] D, #[serde(rename = "h")] H, #[serde(rename = "m")] M, #[serde(rename = "s")] S, #[serde(rename = "ms")] Ms, #[serde(rename = "micros")] Micros, #[serde(rename = "nanos")] Nanos, } #[doc = "The type to sample (default: cpu)"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum Type { #[serde(rename = "cpu")] Cpu, #[serde(rename = "wait")] Wait, #[serde(rename = "block")] Block, #[serde(rename = "mem")] Mem, } #[doc = "Specific version type"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum VersionType { #[serde(rename = "internal")] Internal, #[serde(rename = "external")] External, #[serde(rename = "external_gte")] ExternalGte, } #[doc = "Wait until all currently queued events with the given priority are processed"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum WaitForEvents { #[serde(rename = "immediate")] Immediate, #[serde(rename = "urgent")] Urgent, #[serde(rename = "high")] High, #[serde(rename = "normal")] Normal, #[serde(rename = "low")] Low, #[serde(rename = "languid")] Languid, } #[doc = "Wait until cluster is in a specific state"] #[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)] pub enum WaitForStatus { #[serde(rename = "green")] Green, #[serde(rename = "yellow")] Yellow, #[serde(rename = "red")] Red, } // GENERATED-END /// Control how the total number of hits should be tracked. /// /// When set to `Track` with a value `true`, the response will always track the number of hits that /// match the query accurately. /// /// When set to `Count` with an integer value `n`, the response accurately tracks the total /// hit count that match the query up to `n` documents. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(untagged)] pub enum TrackTotalHits { /// Whether to accurately track the number of hits that match the query accurately Track(bool), /// Accurately track the number of hits up to the specified value Count(i64), } impl From<bool> for TrackTotalHits { fn from(b: bool) -> Self { TrackTotalHits::Track(b) } } impl From<i64> for TrackTotalHits { fn from(i: i64) -> Self { TrackTotalHits::Count(i) } } /// Control how the `_source` field is returned with every hit. /// /// By default operations return the contents of the `_source` field /// unless you have used the `stored_fields` parameter or if the `_source` field is disabled. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(untagged)] pub enum SourceFilter { /// Whether `_source` retrieval should be enabled (`true`) or disabled (`false`) Enable(bool), /// A wildcard pattern to control what parts of `_source` should be returned Include(String), /// A collection of wildcard patterns to control what parts of `_source` should be returned Includes(Vec<String>), /// A collection of wildcard patterns to control what parts of `_source` should /// and should not be returned IncludesExcludes { includes: Vec<String>, excludes: Vec<String>, }, } impl From<bool> for SourceFilter { fn from(b: bool) -> Self { SourceFilter::Enable(b) } } impl From<String> for SourceFilter { fn from(include: String) -> Self { SourceFilter::Include(include) } } impl<'a> From<&'a str> for SourceFilter { fn from(include: &'a str) -> Self { SourceFilter::Include(include.to_owned()) } } impl From<Vec<String>> for SourceFilter { fn from(includes: Vec<String>) -> Self { SourceFilter::Includes(includes) } } impl<'a> From<Vec<&'a str>> for SourceFilter { fn from(includes: Vec<&'a str>) -> Self { SourceFilter::Includes(includes.iter().map(|s| (*s).to_string()).collect()) } } impl From<(Vec<String>, Vec<String>)> for SourceFilter { fn from(includes_excludes: (Vec<String>, Vec<String>)) -> Self { SourceFilter::IncludesExcludes { includes: includes_excludes.0, excludes: includes_excludes.1, } } } impl<'a> From<(Vec<&'a str>, Vec<&'a str>)> for SourceFilter { fn from(includes_excludes: (Vec<&'a str>, Vec<&'a str>)) -> Self { SourceFilter::IncludesExcludes { includes: includes_excludes .0 .iter() .map(|s| (*s).to_string()) .collect(), excludes: includes_excludes .1 .iter() .map(|s| (*s).to_string()) .collect(), } } } /// Control the number of slices a task should be divided into. Defaults to `Slices::Count(1)`, /// meaning the task is not sliced. /// /// When set to `Auto`, a task is automatically divided into a reasonable number of slices /// /// When set to `Count` with an integer value `n`, divides the task into that number of slices #[derive(Debug, Clone, PartialEq)] pub enum Slices { /// Automatically divide the task into a reasonable number of slices Auto, /// Number of slices to divide a task into Count(i32), } impl Serialize for Slices { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer, { match *self { Slices::Auto => serializer.serialize_str("auto"), Slices::Count(i) => serializer.serialize_i32(i), } } } impl<'de> Deserialize<'de> for Slices { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>, { struct SlicesVisitor; impl<'de> Visitor<'de> for SlicesVisitor { type Value = Slices; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "expected integer or string") } fn visit_i64<E>(self, value: i64) -> Result<Self::Value, E> where E: de::Error, { if value <= i32::MAX as i64 { Ok(Slices::Count(value as i32)) } else { Err(E::custom(format!("i32 out of range: {}", value))) } } fn visit_u64<E>(self, value: u64) -> Result<Self::Value, E> where E: de::Error, { if value <= i32::MAX as u64 { Ok(Slices::Count(value as i32)) } else { Err(E::custom(format!("i32 out of range: {}", value))) } } fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> where E: de::Error, { match value { "auto" => Ok(Slices::Auto), n => match n.parse::<i32>() { Ok(i) => Ok(Slices::Count(i)), Err(_) => Err(E::custom(format!( "expected 'auto' or i32 but received: {}", n ))), }, } } fn visit_string<E>(self, value: String) -> Result<Self::Value, E> where E: de::Error, { self.visit_str(&value) } } deserializer.deserialize_any(SlicesVisitor) } } impl Default for Slices { fn default() -> Self { Slices::Count(1) } } impl From<i32> for Slices { fn from(i: i32) -> Self { Slices::Count(i) } } #[cfg(test)] mod tests { use crate::params::Slices; #[test] fn serialize_slices_auto() { let json = serde_json::to_string(&Slices::Auto).unwrap(); assert_eq!("\"auto\"", &json); let slices: Slices = serde_json::from_str(&json).unwrap(); assert_eq!(Slices::Auto, slices); } #[test] fn serialize_slices_count() { let json = serde_json::to_string(&Slices::Count(100)).unwrap(); assert_eq!("100", &json); let slices: Slices = serde_json::from_str(&json).unwrap(); assert_eq!(Slices::Count(100), slices); } }