use rustc_hash::FxBuildHasher;
use crate::error::Span;
use crate::value::{ObjectMap, Value};
pub(super) enum Frame<'a> {
Object {
pairs: ObjectMap,
pending_key: Option<&'a str>,
pending_key_span: Option<Span>,
},
Array {
items: Vec<Value>,
},
}
impl<'a> Frame<'a> {
pub(super) fn new_object() -> Self {
Frame::Object {
pairs: ObjectMap::with_capacity_and_hasher(8, FxBuildHasher),
pending_key: None,
pending_key_span: None,
}
}
pub(super) fn new_array() -> Self {
Frame::Array {
items: Vec::with_capacity(8),
}
}
pub(super) fn into_value(self) -> Value {
match self {
Frame::Object { pairs, .. } => Value::Object(pairs),
Frame::Array { items } => Value::Array(items),
}
}
}