server-master/srcs/WingsAPI.Scripting.LUA/Converter/Converter.cs
2026-02-10 18:21:30 +01:00

54 lines
No EOL
1.8 KiB
C#

using System;
using MoonSharp.Interpreter;
namespace WingsAPI.Scripting.LUA.Converter
{
/// <summary>
/// Converter used to convert CSharp object to Lua object & Lua object to CSharp object
/// </summary>
public interface IConverter
{
/// <summary>
/// Type of lua data
/// </summary>
DataType DataType { get; }
/// <summary>
/// Type of the object created by this converted
/// </summary>
Type ObjectType { get; }
/// <summary>
/// Create lua object from csharp object
/// </summary>
/// <param name="script">Script used to create this object</param>
/// <param name="value">Value to convert</param>
/// <returns>Converted value</returns>
DynValue ToLuaObject(Script script, object value);
/// <summary>
/// Create csharp object from lua object
/// </summary>
/// <param name="value">Lua object to convert</param>
/// <returns>Converted value</returns>
object ToCSharpObject(DynValue value);
}
public abstract class Converter<T> : IConverter
{
/// <summary>
/// Empty object used to get correct properties name using nameof(Object.MyProperty)
/// </summary>
protected static readonly T Object = Activator.CreateInstance<T>();
public virtual DataType DataType { get; } = DataType.Table;
public Type ObjectType { get; } = typeof(T);
public DynValue ToLuaObject(Script script, object value) => ToLuaObject(script, (T)value);
object IConverter.ToCSharpObject(DynValue value) => ToCSharpObject(value);
protected abstract DynValue ToLuaObject(Script script, T value);
protected abstract T ToCSharpObject(DynValue value);
}
}