===
simple
===

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

---

(source_file
  (field
    (label
      (identifier))
    (value
      (struct_lit
        (field
          (label
            (optional
              (identifier)))
          (value
            (primitive_type)))
        (field
          (label
            (optional
              (identifier)))
          (value
            (primitive_type)))
        (field
          (label
            (required
              (identifier)))
          (value
            (primitive_type)))
        (field
          (label
            (identifier))
          (value
            (primitive_type)))
        (field
          (label
            (identifier))
          (label
            (identifier))
          (label
            (identifier))
          (value
            (primitive_type)))))))

===
closed
===

a: close({
    field: int
})


b: a & {
    field: 3
}

---

(source_file
  (field
	(label
	  (identifier))
	(value
	  (call_expression
		(builtin_function)
		(arguments
		  (struct_lit
			(field
			  (label
				(identifier))
			  (value
				(primitive_type))))))))
  (field
	(label
	  (identifier))
	(value
	  (binary_expression
		(identifier)
		(struct_lit
		  (field
			(label
			  (identifier))
			(value
			  (number))))))))

===
bulk
===

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

---

(source_file
  (field
	(label
	  (identifier))
	(value
	  (struct_lit
		(field
		  (label
			(identifier))
		  (value
			(primitive_type)))
		(field
		  (label
			(optional
			  (string)))
		  (value
			(primitive_type)))
		(ellipsis)
		(primitive_type)))))

===
definition
===

#A: {
    field: int
}

_#B: {
		field: string
}

---

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


===
embedding
===

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

s2: {
    "Hello world!"
}

---

(source_file
  (field
	(label
	  (identifier))
	(value
	  (struct_lit
		(field
		  (label
			(identifier))
		  (value
			(number)))
		(field
		  (label
			(identifier))
		  (value
			(number)))
		(struct_lit
		  (field
			(label
			  (identifier))
			(value
			  (number)))))))
  (field
	(label
	  (identifier))
	(value
	  (struct_lit
		(string)))))
