use super::{
any_state::{AnyResult, AnyState},
json_state::JsonState,
root_state::{RootState, RootStatus},
};
use crate::{mem::manager::Manager, tokenizer::JsonToken};
pub struct ConstState<M: Manager> {
pub key: String,
pub state: AnyState<M>,
}
impl<M: Manager> ConstState<M> {
pub fn parse(self, manager: M, token: JsonToken<M::Dealloc>) -> JsonState<M> {
match token {
JsonToken::Semicolon => todo!(),
_ => {
let (any_result, _) = self.state.parse(manager, token);
match any_result {
AnyResult::Continue(state) => JsonState::ParseConst(ConstState {
key: self.key,
state,
}),
AnyResult::Success(mut success) => {
success.state.consts.insert(self.key, success.value);
JsonState::ParseRoot(RootState {
status: RootStatus::Initial,
state: success.state,
new_line: false,
})
}
AnyResult::Error(error) => JsonState::Error(error),
}
}
}
}
}