/// <summary>
        /// Prints all enum options from provided object
        /// </summary>
        /// <param name="enums">Object to print enums from</param>
        public void PrintEnumValues(Type enums)
        {
            Array enumValues;

            try
            {
                enumValues = Enum.GetValues(enums);
            }
            catch (Exception ex)
            {
                switch (ex)
                {
                case InvalidOperationException ioe:
                case ArgumentException ae:
                    _simpleLogger.WriteLog(ErrorConstructor.ConstructErrorMessageFromException(ex));
                    _consoleWrapper.WriteToConsole(ex.Message);
                    return;
                }

                _simpleLogger.WriteLog(ErrorConstructor.ConstructErrorMessageFromException(ex));
                throw;
            }

            _consoleWrapper.WriteToConsole("\nAvailable Options:");
            foreach (var value in enumValues)
            {
                _consoleWrapper.WriteToConsole(value.ToString());
            }
        }
        /// <summary>
        /// Creates instance of any type with provided values
        /// </summary>
        /// <typeparam name="T">Type of instance to create</typeparam>
        /// <param name="input">Input parameters</param>
        /// <returns>New object of provided type</returns>
        public T TryCreateNewInstance <T>(params object[] input)
        {
            if (input is null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            T instance = default(T);

            try
            {
                instance = (T)Activator.CreateInstance(typeof(T), input);
            }
            catch (Exception ex)
            {
                _simpleLogger.WriteLog(ErrorConstructor.ConstructErrorMessageFromException(ex));
                switch (ex)
                {
                case ArgumentException ax:
                case FormatException fx:
                case TypeLoadException tx:
                case NotSupportedException nx:
                case MissingMethodException mme:
                case MemberAccessException mae:
                case OverflowException oe:
                case IndexOutOfRangeException iore:
                case System.Reflection.TargetInvocationException tie:
                    Console.WriteLine(ex.Message);
                    return(default(T));

                default:
                    throw;
                }
            }

            return(instance);
        }