public Action ParseArguments(string[] arguments)
        {
            if (arguments.Length == 0)
            {
                throw new EmptyArgumentsException($"{UserMessages.EmptyArguments} {UserMessages.SpecifyArguments}");
            }

            if (arguments.Length < RequiredArgumentsCount)
            {
                throw new InvalidArgumentException(
                          $"{UserMessages.SomeArgumentsAreMissing} {UserMessages.SpecifyArguments}");
            }

            var command        = arguments[CommandIndex];
            var inputFilePath  = arguments[InputFileIndex];
            var outputFilePath = arguments[OutputFileIndex];

            ValidatePath(inputFilePath, "Input");
            ValidatePath(outputFilePath, "Output");

            IFileService fileService = FileServiceFactory.GetFileService();

            var delegateToCall = GetDelegateToCall(command, fileService);

            return(() => delegateToCall(inputFilePath, outputFilePath));
        }