1use std::str::FromStr;
6use std::convert::From;
7use serde_json::Value;
8use serde_json::value::Index;
9
10use super::OptionExt;
11use super::errors::*;
12
13#[inline]
14pub fn get_array<'a, I: Index>(event: &'a Value, index: I) -> Result<&'a Vec<Value>> {
15 let event = event.get(index).into_result()?;
16 let event = event.as_array().into_result()?;
17 Ok(event)
18}
19
20#[inline]
21pub fn get_object<'a>(
22 objects: &'a Vec<Value>,
23 index: usize,
24) -> Result<&'a ::serde_json::Map<String, Value>> {
25 let object = objects.get(index).into_result()?;
26 let object = object.as_object().into_result()?;
27 Ok(object)
28}
29
30#[inline]
31pub fn get_i64<I: Index>(event: &Value, index: I) -> Result<i64> {
32 let event = event.get(index).into_result()?;
33 let event = event.as_i64().into_result()?;
34 Ok(event)
35}
36
37#[inline]
38pub fn get_str<'a, I: Index>(event: &'a Value, index: I) -> Result<&'a str> {
39 let event = event.get(index).into_result()?;
40 let event = event.as_str().into_result()?;
41 Ok(event)
42}
43
44#[inline]
45pub fn parse_nth_str<T: FromStr>(event: &Value, index: usize) -> Result<T>
46where
47 Error: From<<T as FromStr>::Err>,
48{
49 match event.get(index) {
50 Some(value) => parse_str::<T>(value),
51 None => Err(ErrorKind::EmptyOption.into()),
52 }
53}
54
55#[inline]
56pub fn parse_str<T: FromStr>(value: &Value) -> Result<T>
57where
58 Error: From<<T as FromStr>::Err>,
59{
60 match value.as_str() {
61 Some(value) => value.parse::<T>().map_err(|e| e.into()),
62 None => Err(ErrorKind::EmptyOption.into()),
63 }
64}