php_parser_rs/parser/ast/
literals.rs1use schemars::JsonSchema;
2use serde::Deserialize;
3use serde::Serialize;
4
5use crate::lexer::byte_string::ByteString;
6use crate::lexer::token::Span;
7use crate::node::Node;
8
9#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
10#[serde(tag = "type", content = "value")]
11pub enum Literal {
12 String(LiteralString),
13 Integer(LiteralInteger),
14 Float(LiteralFloat),
15}
16
17impl Node for Literal {
18 fn children(&mut self) -> Vec<&mut dyn Node> {
19 match self {
20 Literal::String(literal) => vec![literal],
21 Literal::Integer(literal) => vec![literal],
22 Literal::Float(literal) => vec![literal],
23 }
24 }
25}
26
27#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
28
29pub struct LiteralString {
30 pub value: ByteString,
31 pub span: Span,
32 pub kind: LiteralStringKind,
33}
34
35#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
36pub enum LiteralStringKind {
37 SingleQuoted,
38 DoubleQuoted,
39}
40
41impl Node for LiteralString {
42 }
44
45#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
46
47pub struct LiteralInteger {
48 pub value: ByteString,
49 pub span: Span,
50}
51
52impl Node for LiteralInteger {
53 }
55
56#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
57
58pub struct LiteralFloat {
59 pub value: ByteString,
60 pub span: Span,
61}
62
63impl Node for LiteralFloat {
64 }