internal TerminalCommand(MethodInfo method, TerminalBindingAttribute binding) { Name = binding.Name ?? method.Name; Method = method; Description = binding.Description; if (method.ReturnType != typeof(Task) && method.ReturnType != typeof(void) && method.ReturnType != typeof(ValueTask)) { throw new FormatException($"Command Return Type for {method.DeclaringType.FullName}.{method.Name} must be Void or Task/ValueTask"); } var Parameters = method.GetParameters(); if (Parameters.Length > 0) { TakesTerminal = Parameters[0].ParameterType.IsAssignableFrom(typeof(ITerminal)); TakesToken = Parameters[Parameters.Length - 1].ParameterType == typeof(CancellationToken); if (TakesTerminal) { if (TakesToken) { ExternalParameters = Parameters.AsMemory(1, Parameters.Length - 2); } else { ExternalParameters = Parameters.AsMemory(1); } } else { if (TakesToken) { ExternalParameters = Parameters.AsMemory(0, Parameters.Length - 1); } else { ExternalParameters = Parameters.AsMemory(); } } } }
//**************************************** internal TerminalVariable(PropertyInfo property, TerminalBindingAttribute binding) { Name = binding.Name ?? property.Name; _Property = property; Description = binding.Description; }