in elasticsearch/src/params.rs [431:491]
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)
}