// json.vr — the stdlib JSON + formatting builtins.
//   vr run examples/json.vr

fn main() {
	// --- encode: structs -> objects, arrays -> arrays, none -> null ---
	let user = {
		name: "amy",
		age: 30,
		active: 1,
		score: 87.5,
		tags: ["admin", "beta"],
		meta: { last_seen: none }
	}
	println(json_encode(user))
	// {"name":"amy","age":30,"active":1,"score":87.5,"tags":["admin","beta"],"meta":{"last_seen":null}}

	// --- decode: objects become structs, numbers become ints when integral ---
	let parsed = json_decode("{\"name\": \"bob\", \"age\": 42, \"scores\": [1, 2.5, 3]}")
	println(parsed.name)
	println(parsed.age)
	println(parsed.scores[1])
	println(json_encode(parsed))

	// null decodes to `none` — test with ==
	let maybe = json_decode("{\"value\": null}")
	if maybe.value == none {
		println("field is none")
	}

	// --- format: printf-style ---
	println(format(3.14159, "%.2f"))     // 3.14
	println(format(42, "%05d"))          // 00042
	println(format(255, "%X"))           // FF
	println(format("right", "%10s"))     //      right
	println(format("left", "%-10s") + "|") // left       |

	// --- string tools ---
	println("hello world".replace("l", "L"))
	println(len(split_lines("a\nb\nc")))
	println(pad_left("42", 5) + "|")
	println("ab".repeat(3))

	// --- json + formatting together ---
	let total = 1234.5
	println("total: " + format(total, "%.2f"))
}
