1use ordered_float::NotNan;
2
3use super::{map_ref::MapRef, val::Val};
4
5#[derive(PartialEq, Eq, Debug, Hash, PartialOrd, Ord)]
6pub enum ValRef<'a> {
7 Null,
8 Bool(bool),
9 Number(NotNan<f64>),
10 String(&'a str),
11 Array(&'a [Val]),
12 Object(MapRef<'a>),
13}
14
15impl<'a> ValRef<'a> {
16 #[inline]
17 pub fn as_str(self) -> Option<&'a str> {
18 match self {
19 ValRef::String(s) => Some(s),
20 _ => None,
21 }
22 }
23
24 #[inline]
25 pub fn get<S: AsRef<str>>(self, key: S) -> Option<&'a Val> {
26 match self {
27 ValRef::Object(o) => o.get(key),
28 _ => None,
29 }
30 }
31}