# Hurry Curry! - a game about cooking # Copyright (C) 2025 Hurry Curry! contributors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, version 3 of the License only. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # class_name Serialize extends Object func serialize() -> String: return JSON.stringify(to_dict()) func to_dict() -> Dictionary: var dict: Dictionary = {} for i in get_property_list(): var type = i["type"] var v = get(i["name"]) if v == null: continue match type: TYPE_NIL || TYPE_CALLABLE: pass TYPE_OBJECT: if v is Serialize: dict[i["name"]] = v.to_dict() TYPE_ARRAY: dict[i["name"]] = v.map(func(e): return e.to_dict() if e is Serialize else e) _: dict[i["name"]] = v return dict func deserialize(de: String): return from_dict(JSON.parse_string(de)) func from_dict(dict: Dictionary): for i in get_property_list(): var type = i["type"] var name = i["name"] if !dict.has(name) || dict[name] == null: continue match type: TYPE_NIL || TYPE_CALLABLE: pass TYPE_OBJECT: var copy = new() copy.from_dict(dict[name]) set(name, copy) TYPE_ARRAY: set(name, dict[name].map(func(e): if e is Dictionary: var copy = new() copy.from_dict(e) return copy else: return e ) ) _: set(name, dict[name])