1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//! 値の木。
//!
//! 入力の文字列を指したまま持つ。数値と、エスケープのない文字列には、新しい String を作らない。
//! オブジェクトのキーは出てきた順に並べる。
use std::borrow::Cow;
/// JSON の値。'a は入力の文字列のライフタイム。
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Value<'a> {
Null,
Bool(bool),
/// 入力の字面をそのまま指す。1.50 も 1E5 も桁の多い整数も、そのまま書き戻す
Number(&'a str),
/// エスケープを解いたあとの文字列。入力にエスケープがなければ、入力をそのまま指す
String(Cow<'a, str>),
Array(Vec<Value<'a>>),
/// キーと値の組を、出てきた順に並べる。同じキーが 2 回あれば両方とも残す
Object(Vec<(Cow<'a, str>, Value<'a>)>),
}