===
simple
===

a: {
    foo?: int
    bar?: string
		_hidden: string
		a: b: c: string
}

---

(source_file 
 (field (label (identifier)) (value (struct_lit 
																		 (field (label (identifier)) (value (int_type))) 
																		 (field (label (identifier)) (value (string_type))) 
																		 (field (label (identifier)) (value (string_type))) 
																		 (field (label (identifier)) (label (identifier)) (label (identifier)) (value (string_type)))))))

===
closed
===

a: close({
    field: int
})


b: a & {
    field: 3
}

---

(source_file 
 (field (label (identifier)) (value (call_expression (builtin) 
																		 (arguments (argument 
																			 (struct_lit 
																				(field (label (identifier)) (value (int_type))))))))) 
 (field (label (identifier)) (value (binary_expression (identifier) 
																		 (struct_lit 
																			(field (label (identifier)) (value (int_lit))))))))

===
bulk
===

a: {
		foo: string
		["^i"]: bool
		...string
}

---

(source_file 
 (field (label (identifier)) (value (struct_lit 
																		 (field (label (identifier)) (value (string_type))) 
																		 (field (label (optional (simple_string_lit))) (value (bool_type))) 
																		 (ellipsis) (string_type)))))

===
definition
===

#A: {
    field: int
}

_#B: {
		field: string
}

---

(source_file 
 (field (label (identifier)) (value (struct_lit (field (label (identifier)) (value (int_type)))))) 
 (field (label (identifier)) (value (struct_lit (field (label (identifier)) (value (string_type)))))))


===
embedding
===

s1: {
    a: 1
    b: 2
    {
        c: 3
    }
}

---

(source_file 
 (field (label (identifier)) (value (struct_lit 
																		 (field (label (identifier)) (value (int_lit))) 
																		 (field (label (identifier)) (value (int_lit))) 
																		 (struct_lit 
																			(field (label (identifier)) (value (int_lit))))))))
