25 lines
885 B
GDScript
25 lines
885 B
GDScript
class_name DefinitionParameterValidator
|
|
extends RefCounted
|
|
|
|
|
|
static func validate(parameters: Dictionary, owner: String) -> Array[String]:
|
|
var errors: Array[String] = []
|
|
for raw_key in parameters:
|
|
if not raw_key is String and not raw_key is StringName:
|
|
errors.append("%s has a non-string parameter key" % owner)
|
|
continue
|
|
var key := StringName(raw_key)
|
|
if key.is_empty():
|
|
errors.append("%s has an empty parameter key" % owner)
|
|
var value: Variant = parameters[raw_key]
|
|
if not _is_primitive(value):
|
|
errors.append("%s parameter '%s' must be primitive" % [owner, key])
|
|
elif value is float and not is_finite(value):
|
|
errors.append("%s parameter '%s' must be finite" % [owner, key])
|
|
errors.sort()
|
|
return errors
|
|
|
|
|
|
static func _is_primitive(value: Variant) -> bool:
|
|
return value is bool or value is int or value is float or value is String or value is StringName
|