using Assets.Scripts.Ble.Commands; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Assets.Scripts.Commands { public static class CommandFactory { public static Command GetBatteryLevel(Action action = null) { return new Command(CommandType.GetBatteryLevel, CommandFactory.InjectCommandAction(action)); } private static CommandAction InjectCommandAction(Action action) where T : struct { if (action == null) { return null; } return delegate (CommandResponseStatus status, object data) { T? arg = data as T?; if (data != null && arg == null) { action(new CommandResponseStatus(status.Type, CommandResponseCode.TypeMismatch), null); return; } action(status, arg); }; } } }