use std::borrow::Cow;
use crate::OwnedJsonb;
use crate::RawJsonb;
use crate::core::ArrayIterator;
use crate::error::*;
impl RawJsonb<'_> {
pub fn get_by_index(&self, index: usize) -> Result<Option<OwnedJsonb>> {
let array_iter_opt = ArrayIterator::new(*self)?;
if let Some(mut array_iter) = array_iter_opt
&& let Some(item_result) = array_iter.nth(index)
{
let item = item_result?;
let value = OwnedJsonb::from_item(item)?;
return Ok(Some(value));
}
Ok(None)
}
pub fn get_by_name(&self, name: &str, ignore_case: bool) -> Result<Option<OwnedJsonb>> {
let key_name = Cow::Borrowed(name);
if let Some(val_item) =
self.get_object_value_by_key_name(&key_name, |name, key| key.eq(name))?
{
let value = OwnedJsonb::from_item(val_item)?;
return Ok(Some(value));
}
if ignore_case
&& let Some(val_item) = self.get_object_value_by_key_name(&key_name, |name, key| {
key.eq_ignore_ascii_case(name)
})?
{
let value = OwnedJsonb::from_item(val_item)?;
return Ok(Some(value));
}
Ok(None)
}
}