private static Result <Bitmap> OnCallAction(ConsoleParsedOptions parsedOptions) { var resultOptions = Result.Of(() => new BuildOptions(parsedOptions)); if (!resultOptions.IsSuccess) { return(Result.Fail <Bitmap>(resultOptions.Error)); } var options = resultOptions.GetValueOrThrow(); return(resultOptions .Then(BuildContainer) .Then(container => { var fullPath = options.InputFilePath; var size = new Size(options.Width, options.Height); var format = container.Resolve <CloudSettings>(); return container.Resolve <CloudBuilder <Bitmap> >() .CreateTagCloudRepresentation(fullPath, size, format); }) .Then(image => Result.Of(() => { image.Save(options.OutputFilePath, ImageFormatter.ParseImageFormat(options.ImageExtension)); return image; }))); }
public BuildOptions(ConsoleParsedOptions parsedOptions) { InputFilePath = parsedOptions.InputFilePath; OutputFilePath = parsedOptions.OutputFilePath; ImageExtension = parsedOptions.ImageExtension; if (parsedOptions.Width < 0) { throw new ArgumentOutOfRangeException($"Image width can't be less than zero"); } if (parsedOptions.Height < 0) { throw new ArgumentOutOfRangeException($"Image heigth can't be less than zero"); } Width = parsedOptions.Width; Height = parsedOptions.Height; BackgroundColor = ColorsHexConverter.CreateFromHex(parsedOptions.BackgroundColor); ColorsPalette = ColorsHexConverter.CreateFromHexEnumerable(parsedOptions.ColorsPalette); SpiralStep = parsedOptions.SpiralStep; FontFamily = new FontFamily(parsedOptions.FontFamilyName); FontSizeMultiplier = parsedOptions.FontSizeMultiplier; if (parsedOptions.MaximalFontSize <= 0) { throw new ArgumentOutOfRangeException($"Maximal font size can't be less or equal than zero"); } MaximalFontSize = parsedOptions.MaximalFontSize; BoringPartsOfSpeech = parsedOptions.BoringPartsOfSpeech.Split(' '); BoringWords = parsedOptions.BoringWords.Split(' '); }