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;
        }