git.delta.rocks / jrsonnet / refs/commits / 31dfb91f8ba3

difftreelog

source

crates/jsonnet-parser/src/expr.rs3.2 KiBsourcehistory
1#[derive(Debug, Clone, PartialEq)]2pub enum FieldName {3	/// {fixed: 2}4	Fixed(String),5	/// {["dyn"+"amic"]: 3}6	Dyn(Box<Expr>),7}89#[derive(Debug, Clone, PartialEq)]10pub enum Visibility {11	/// :12	Normal,13	/// ::14	Hidden,15	/// :::16	Unhide,17}1819#[derive(Debug, Clone, PartialEq)]20pub struct AssertStmt(pub Box<Expr>, pub Option<Box<Expr>>);2122#[derive(Debug, Clone, PartialEq)]23pub enum FieldMember {24	Value {25		name: FieldName,26		plus: bool,27		visibility: Visibility,28		value: Expr,29	},30	Function {31		name: FieldName,32		params: Params,33		visibility: Visibility,34		value: Expr,35	},36}3738#[derive(Debug, Clone, PartialEq)]39pub enum Member {40	Field(FieldMember),41	BindStmt(Bind),42	AssertStmt(AssertStmt),43}4445#[derive(Debug, Clone, PartialEq)]46pub enum UnaryOp {47	Plus,48	Minus,49	BitNot,50	Not,51}5253#[derive(Debug, Clone, PartialEq)]54pub enum BinaryOp {55	Mul,56	Div,57	Mod,5859	Add,60	Sub,6162	Lhs,63	Rhs,6465	Lt,66	Gt,67	Lte,68	Gte,6970	In,7172	Eq,73	Ne,7475	BitAnd,76	BitOr,77	And,78	Or,7980	BitXor,81}8283#[derive(Debug, Clone, PartialEq)]84pub enum Param {85	Positional(String),86	Named(String, Box<Expr>),87}8889#[derive(Debug, Clone, PartialEq)]90pub struct Params(pub Vec<Param>);9192#[derive(Debug, Clone, PartialEq)]93pub enum Arg {94	Positional(Box<Expr>),95	Named(String, Box<Expr>),96}9798#[derive(Debug, Clone, PartialEq)]99pub struct Args(pub Vec<Arg>);100101#[derive(Debug, Clone, PartialEq)]102pub enum Bind {103	Value(String, Box<Expr>),104	Function(String, Params, Box<Expr>),105}106107#[derive(Debug, Clone, PartialEq)]108pub struct IfSpec(pub Box<Expr>);109#[derive(Debug, Clone, PartialEq)]110pub struct ForSpec(pub String, pub Vec<IfSpec>);111112#[derive(Debug, Clone, PartialEq)]113pub enum CompSpec {114	IfSpec(IfSpec),115	ForSpec(ForSpec),116}117118#[derive(Debug, Clone, PartialEq)]119pub enum ObjBody {120	MemberList(Vec<Member>),121	ObjComp {122		pre_locals: Vec<Bind>,123		key: Box<Expr>,124		value: Box<Expr>,125		post_locals: Vec<Bind>,126		first: ForSpec,127		rest: Vec<CompSpec>,128	},129}130131#[derive(Debug, Clone, PartialEq)]132pub enum Literal {133	Null,134	True,135	False,136	This,137	Super,138	Dollar,139}140141/// Syntax base142#[derive(Debug, Clone, PartialEq)]143pub enum Expr {144	/// Plain value: null/true/false145	Literal(Literal),146147	/// String value: "hello"148	Str(String),149	/// Number: 1, 2.0, 2e+20150	Num(f64),151	/// Variable name: test152	Var(String),153154	/// Array of expressions: [1, 2, "Hello"]155	Arr(Vec<Expr>),156	/// Array comprehension:157	/// ```jsonnet158	///  ingredients: [159	///    { kind: kind, qty: 4 / 3 }160	///    for kind in [161	///      'Honey Syrup',162	///      'Lemon Juice',163	///      'Farmers Gin',164	///    ]165	///  ],166	/// ```167	ArrComp(Box<Expr>, Vec<ForSpec>),168169	/// Object: {a: 2}170	Obj(ObjBody),171	/// Object extension: var1 {b: 2}172	ObjExtend(Box<Expr>, ObjBody),173174	/// (obj)175	Parened(Box<Expr>),176177	Params(Params),178	Args(Args),179180	UnaryOp(UnaryOp, Box<Expr>),181	BinaryOp(Box<Expr>, BinaryOp, Box<Expr>),182	AssertExpr(AssertStmt, Box<Expr>),183	LocalExpr(Vec<Bind>, Box<Expr>),184185	Bind(Bind),186	Import(String),187	ImportStr(String),188	Error(Box<Expr>),189	Apply(Box<Expr>, Args),190	Select(Box<Expr>, String),191	Index(Box<Expr>, Box<Expr>),192	Slice {193		value: Box<Expr>,194		start: Option<Box<Expr>>,195		end: Option<Box<Expr>>,196		step: Option<Box<Expr>>,197	},198	Function(Params, Box<Expr>),199	IfElse {200		cond: IfSpec,201		cond_then: Box<Expr>,202		cond_else: Option<Box<Expr>>,203	},204	IfSpec(IfSpec),205	ForSpec(ForSpec),206}