class_name Utils

static func get_class_name(value: Object) -> String:
    match value.get_script():
        var script:
            match script.get_global_name():
                var name: return name
                _: return script.get_instance_base_type()
        _: return value.get_class()

static func is_string_like(value: Variant) -> bool:
    match typeof(value):
        TYPE_STRING: return true
        TYPE_STRING_NAME: return true
        TYPE_NODE_PATH: return true
        _: return false

static func to_str(value: Variant) -> String:
    match typeof(value):
        TYPE_OBJECT:
            if value.has_method('_to_string'):
                return value.to_string()
            else:
                var name = get_class_name(value)
                value = value as Object
                var props: Dictionary = inst_to_dict(value)
                return "%s %s" % [name, to_str(props)]
        _: return str(value)
