rs-jsonnet 0.1.22

Pure Rust implementation of Jsonnet 0.21.0 compatible with Google Jsonnet
Documentation
//! Abstract Syntax Tree for Jsonnet

use serde::{Deserialize, Serialize};

/// Expression in Jsonnet
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Expr {
    /// Identifier
    Identifier(String),
    /// String literal
    String(String),
    /// Number literal
    Number(f64),
    /// Boolean literal
    Boolean(bool),
    /// Null literal
    Null,
    /// Object literal
    Object(Vec<(String, Expr)>),
    /// Array literal
    Array(Vec<Expr>),
    /// Function call
    Call(Box<Expr>, Vec<Expr>),
    /// Array indexing
    ArrayAccess(Box<Expr>, Box<Expr>),
    /// Object field access
    FieldAccess(Box<Expr>, String),
    /// Local variable bindings
    Local(Vec<(String, Expr)>, Box<Expr>),
    /// Function definition
    Function(Vec<String>, Box<Expr>),
    /// String interpolation
    StringInterpolation(Vec<StringPart>),
    /// Array comprehension
    ArrayComprehension {
        expr: Box<Expr>,
        var_name: String,
        array_expr: Box<Expr>,
        condition: Option<Box<Expr>>,
    },
    /// Conditional expression
    Conditional(Box<Expr>, Box<Expr>, Box<Expr>),
    /// Binary operation
    BinaryOp(BinaryOp, Box<Expr>, Box<Expr>),
    /// Unary operation
    UnaryOp(UnaryOp, Box<Expr>),
}

/// Statement in Jsonnet
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Stmt {
    /// Expression statement
    Expr(Expr),
    /// Local variable declaration
    Local(String, Expr),
    /// Assignment
    Assign(String, Expr),
}

/// Binary operators
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum BinaryOp {
    /// Addition
    Add,
    /// Subtraction
    Sub,
    /// Multiplication
    Mul,
    /// Division
    Div,
    /// Modulo
    Mod,
    /// Equal
    Eq,
    /// Not equal
    Ne,
    /// Less than
    Lt,
    /// Less than or equal
    Le,
    /// Greater than
    Gt,
    /// Greater than or equal
    Ge,
    /// And
    And,
    /// Or
    Or,
}

/// Unary operators
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum UnaryOp {
    /// Negation
    Neg,
    /// Not
    Not,
    /// Plus
    Plus,
}

/// Parts of a string interpolation
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum StringPart {
    /// Literal text
    Literal(String),
    /// Variable interpolation
    Interpolation(Expr),
}