php_parser_rs/parser/ast/
literals.rs

1use 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    //
43}
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    //
54}
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    //
65}