1use crate::{json, jsx, shared::sp};
2use nom::{
3 branch::alt,
4 combinator::{map, opt},
5 error::ParseError,
6 sequence::delimited,
7 IResult,
8};
9use serde::{Serialize, Serializer};
10
11#[derive(Debug, PartialEq, Clone)]
13pub enum JsxnValue {
14 JsxValue(jsx::JsxValue),
16
17 JsonValue(json::JsonValue),
19}
20
21impl Serialize for JsxnValue {
22 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23 where
24 S: Serializer,
25 {
26 match self {
27 JsxnValue::JsxValue(json_value) => json_value.serialize(serializer),
28 JsxnValue::JsonValue(jsx_value) => jsx_value.serialize(serializer),
29 }
30 }
31}
32
33pub fn root<'a, E: ParseError<&'a str>>(i: &'a str) -> IResult<&'a str, JsxnValue, E> {
35 delimited(
36 sp,
37 alt((
38 map(json::root, JsxnValue::JsonValue),
39 map(jsx::root, JsxnValue::JsxValue),
40 )),
41 opt(sp),
42 )(i)
43}