24{
25 std::cout << "=== Schema Validation Example ===" << std::endl;
26
27
28 std::cout << "\n1. Defining schema:" << std::endl;
29 auto schema = container_schema()
30 .require("username", value_types::string_value)
31 .require("age", value_types::int_value)
32 .range("age", 0, 150)
33 .length("username", 3, 20)
34 .optional("nickname", value_types::string_value);
35
36 std::cout << " Fields: " << schema.field_count() << std::endl;
37 std::cout << " 'username' required: " << (schema.is_required("username") ? "yes" : "no")
38 << std::endl;
39 std::cout << " 'nickname' required: " << (schema.is_required("nickname") ? "yes" : "no")
40 << std::endl;
41
42
43 std::cout << "\n2. Validating valid container:" << std::endl;
44 value_container valid;
45 valid.set("username", std::string("alice"));
46 valid.set("age", static_cast<int64_t>(25));
47
48 auto result = schema.validate(valid);
49 std::cout << " Valid: " << (result ? "yes" : "no") << std::endl;
50
51
52 std::cout << "\n3. Validating invalid container (missing age):" << std::endl;
53 value_container invalid;
54 invalid.set("username", std::string("bob"));
55
56 auto errors = schema.validate_all(invalid);
57 std::cout << " Errors: " << errors.size() << std::endl;
58 for (const auto& err : errors)
59 {
60 std::cout << " - " << err.field << ": " << err.message << std::endl;
61 }
62
63
64 std::cout << "\n4. Schema inspection:" << std::endl;
65 std::cout << " Has 'username': " << (schema.has_field("username") ? "yes" : "no")
66 << std::endl;
67 std::cout << " Has 'address': " << (schema.has_field("address") ? "yes" : "no")
68 << std::endl;
69
70 std::cout << "\nDone." << std::endl;
71 return 0;
72}