Files
VRyHungry1/addons/yaml/examples/example_validation.gd
T
2026-07-19 10:47:28 +02:00

108 lines
2.4 KiB
GDScript

extends ExampleBase
var schema: Schema
func _init() -> void:
icon = "🛡️"
func run_examples() -> void:
run_example("Load YAML Schema", load_yaml_schema)
run_example("Validate Using Schema", validate_using_schema)
run_example("Validate While Parsing", validate_while_parsing)
run_example("Validate With Defaults", validate_with_defaults)
func load_yaml_schema() -> void:
var yaml_schema_text = """
# The $id string is used as an identifier
$id: "http://example.com/user.yaml"
# Definitions
$defs:
settings:
type: object
properties:
theme:
type: string
default: dark
type: object
properties:
username:
type: string
minLength: 3
maxLength: 20
email:
type: string
format: email
role:
type: string
default: user
x-yaml-tag: UserRole
settings:
$ref: "#/$defs/settings"
required:
- username
- email
""".replace("\t", " ")
schema = YAML.load_schema_from_string(yaml_schema_text)
if !schema:
log_error("Schema failed to load!")
else:
log_success("Schema '%s' loaded" % schema.get_schema_definition().get("$id"))
func validate_using_schema() -> void:
# Validate using the Schema object
log_subheader("Successful validation")
var result := schema.validate({
"username": "alice",
"email": "alice@example.com"
})
if result.is_valid():
log_success(result.get_summary())
else:
log_error(result.get_summary())
log_subheader("Failed validation")
result = schema.validate({
"username": "alice",
"email": "invalid email"
})
if !result.is_valid():
log_success(result.get_summary())
else:
log_error(result.get_summary())
func validate_while_parsing() -> void:
# YAML tag validation
var tagged_yaml = """
username: bob
email: bob@example.com
role: !UserRole admin
settings:
theme: white
"""
# Parse and validate using Schema $id property
var result := YAML.parse_and_validate(tagged_yaml, "http://example.com/user.yaml")
if result.has_validation_errors():
log_error(result.get_validation_summary())
return
log_success(result.get_data())
func validate_with_defaults() -> void:
# Default values
var yaml_str = """
$schema: "http://example.com/user.yaml" # This refers to the $id
username: alice
email: alice@example.com
settings: {} # Empty dictionary is required to set default values
"""
# Parse and validate using YAML $schema property
var result := YAML.parse_and_validate(yaml_str)
if result.has_validation_errors():
log_error(result.get_validation_summary())
return
log_success(result.get_data())