/// <inheritdoc /> public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false) { if (Reading) { return; } var value = func.Invoke(); // don't write if value is null or default if (!alwaysWrite && IsValueDefault(name, value, defaultValue, WithFormat <T> .NoFormat)) { return; } var key = name; var val = value == null?TypeToNode(defaultValue !) : TypeToNode(value); // write the concrete type tag if (typeof(T).IsAbstract || typeof(T).IsInterface) { var concreteType = value == null ? defaultValue !.GetType() : value.GetType(); val.Tag = $"!type:{concreteType.Name}"; } WriteMap !.Add(key, val); }
/// <summary> /// It's <see cref="DataReadFunction" /> and <see cref="DataWriteFunction" /> in one, so you don't need to pass name and default twice! /// Marvelous! /// </summary> public virtual void DataReadWriteFunction <T>(string name, T defaultValue, ReadFunctionDelegate <T> readFunc, WriteFunctionDelegate <T> writeFunc, bool alwaysWrite = false) { if (Reading) { DataReadFunction(name, defaultValue, readFunc); } else { DataWriteFunction(name, defaultValue, writeFunc, alwaysWrite); } }
/// <inheritdoc /> public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false) { if (Reading) { return; } var value = func.Invoke(); // don't write if value is null or default if (!alwaysWrite && IsValueDefault(name, value, defaultValue)) { return; } var key = name; var val = value == null?TypeToNode(defaultValue) : TypeToNode(value); WriteMap.Add(key, val); }
/// <inheritdoc /> public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false) { if (Reading) { return; } var value = func.Invoke(); // don't write if value is null or default if (!alwaysWrite && IsValueDefault(name, value, defaultValue, WithFormat <T> .NoFormat)) { return; } var key = name; var val = value == null?TypeToNode(defaultValue !) : TypeToNode(value); // write the concrete type tag AssignTag(typeof(T), value, defaultValue, val); WriteMap !.Add(key, val); }
/// <summary> /// Provides a delegate to write custom data to a more simpler type that can be mapped to mediums like YAML. /// This is useful if your data does not map 1:1 to the prototype. /// </summary> /// <param name="name">The name of the field in the serialization medium. Most likely the name in YAML.</param> /// <param name="defaultValue">The default value. Used to check if writing can be skipped when <paramref name="alwaysWrite" /> is true.</param> /// <param name="func">A delegate that produces simpler data based on the internal state of the caller.</param> /// <param name="alwaysWrite">If true, data will always be written even if it matches <paramref name="defaultValue" />.</param> /// <typeparam name="T">The type of the data that will be written to the storage medium.</typeparam> public abstract void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false);
public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false) { }
public static extern CurlCode EasySetOpt64(CurlEasyHandle handle, CurlOption option, WriteFunctionDelegate value);