private void StoreVariable(string name, MondValue value) { if (name.Length > MaxVariableNameSize) { throw new MondRuntimeException($"Variable name '{name}' is too long"); } var data = JsonModule.Serialize(_state, value); if (data.Length > MaxVariableContentSize) { throw new MondRuntimeException($"Variable '{name}' exceeds maximum size"); } var cmd = new SqlCommand(_connection, _transaction, @"INSERT INTO mondbot.variables (name, type, data, version) VALUES (:name, :type, :data, 2) ON CONFLICT (name) DO UPDATE SET type = :type, data = :data, version = 2;") { ["name"] = name, ["type"] = (int)VariableType.Serialized, ["data"] = data }; using (cmd) { cmd.ExecuteNonQuery().Wait(); } }
public static bool TrySerialize(MondState state, MondValue value, out MondValue serialized) { bool canSerialize = value[Serialize]; if (!canSerialize) { serialized = MondValue.Undefined; return(false); } serialized = JsonModule.Serialize(state, value); return(true); }