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

141 lines
3.6 KiB
GDScript

extends ExampleBase
const YAML_FILE = "res://addons/yaml/examples/data/supported_syntax.yaml"
const OUTPUT_FILE = "user://supported_syntax_copy.yaml"
var yaml_text := """
string: string_value
number: 1234
list:
- apples
- oranges
"""
var data
func _init() -> void:
icon = "📝"
func run_examples() -> void:
run_example("Validate YAML String Syntax", validate_yaml_string_syntax)
run_example("Parse YAML Text", parse_yaml_text)
run_example("Stringify Data", stringify_data)
run_example("Validate File Syntax", validate_file_syntax)
run_example("Load File", load_file)
run_example("Save File", save_file)
run_example("Load Saved File", load_saved_file)
func validate_yaml_string_syntax() -> void:
log_code_block(yaml_text)
log_info("Validating YAML string...")
var result := YAML.validate_syntax(yaml_text)
if result.has_error():
log_error("Validation failed: " + result.get_error())
return
log_success("YAML is valid!")
func parse_yaml_text() -> void:
log_info("Parsing YAML text...")
var result := YAML.parse(yaml_text)
if result.has_error():
log_error("Parse failed: " + result.get_error())
return
data = result.get_data()
log_success("YAML parsed successfully")
if LOG_VERBOSE:
log_result(str(data))
log_info("Accessing data values:")
log_info("• string value: " + data.string)
log_info("• number value: " + str(data.number))
log_info("• list items: " + str(data.list))
func stringify_data() -> void:
# First ensure we have data to stringify
if data == null:
data = YAML.parse(yaml_text).get_data()
log_info("Converting data structure to YAML string...")
var result := YAML.stringify(data)
if result.has_error():
log_error("Stringify failed: " + result.get_error())
return
log_success("Data converted to YAML successfully")
if LOG_VERBOSE:
log_result(result.get_data())
# Verify the round trip
var yaml_output = result.get_data().strip_edges()
var original = yaml_text.strip_edges()
if yaml_output == original:
log_success("Round-trip verification: Output matches original")
else:
log_warning("Round-trip produced different output (semantically equivalent)")
log_info("Original:\n" + original)
log_info("Output:\n" + yaml_output)
func validate_file_syntax() -> void:
log_info("Validating YAML file: " + YAML_FILE)
var result := YAML.validate_file_syntax(YAML_FILE)
if result.has_error():
log_error("File validation failed: " + result.get_error())
return
log_success("YAML file is valid")
func load_file() -> void:
log_info("Loading YAML file: " + YAML_FILE)
var result := YAML.load_file(YAML_FILE)
if result.has_error():
log_error("File loading failed: " + result.get_error())
return
data = result.get_data()
log_success("YAML file loaded successfully")
if LOG_VERBOSE:
log_info("File contains " + str(data.size()) + " keys")
log_result(str(data).substr(0, 500) + "...\n(output truncated)")
func save_file() -> void:
# Make sure we have data
if data == null:
data = {"example": "data", "created": "now", "values": [1, 2, 3]}
log_info("Saving data to YAML file: " + OUTPUT_FILE)
var result := YAML.save_file(data, OUTPUT_FILE)
if result.has_error():
log_error("File saving failed: " + result.get_error())
return
log_success("Data saved to YAML file successfully")
if LOG_VERBOSE:
log_result(result.get_data())
func load_saved_file() -> void:
log_info("Loading previously saved file: " + OUTPUT_FILE)
var result := YAML.load_file(OUTPUT_FILE)
if result.has_error():
log_error("File loading failed: " + result.get_error())
return
var loaded_data = result.get_data()
log_success("Saved file loaded successfully")
if LOG_VERBOSE:
log_result(str(loaded_data))