public Task <FontFamily> GetFont(CancellationToken cancellationToken)
        {
            if (_fontCollection.TryFind(_fontName, out var fontFamily))
            {
                return(Task.FromResult(fontFamily));
            }

            throw new Exception($"Font {_fontName} not found.");
        }
    /// <inheritdoc />
    public async Task <StubResponseWriterResultModel> WriteToResponseAsync(StubModel stub, ResponseModel response)
    {
        var imgDefinition = stub.Response?.Image;

        if (imgDefinition == null || imgDefinition.Type == ResponseImageType.NotSet)
        {
            return(StubResponseWriterResultModel.IsNotExecuted(GetType().Name));
        }

        var stubImage = stub.Response.Image;

        response.Headers.AddOrReplaceCaseInsensitive("Content-Type", stubImage.ContentTypeHeaderValue);

        var cacheFilePath = Path.Combine(_fileService.GetTempPath(), $"{stubImage.Hash}.bin");

        byte[] bytes;
        if (_fileService.FileExists(cacheFilePath))
        {
            bytes = _fileService.ReadAllBytes(cacheFilePath);
        }
        else
        {
            var collection = new FontCollection();
            collection.Install(Path.Combine(_assemblyService.GetExecutingAssemblyRootPath(),
                                            "Manrope-Regular.ttf"));
            const string fontFamilyName = "Manrope";
            if (!collection.TryFind(fontFamilyName, out var family))
            {
                throw new RequestValidationException($"Font family '{fontFamilyName}' not found!");
            }

            using var image = new Image <Rgba32>(stubImage.Width, stubImage.Height);
            var font        = new Font(family, stubImage.FontSize);
            var parsedColor = Color.ParseHex(stubImage.BackgroundColor);
            var polygon     = new Rectangle(0, 0, stubImage.Width, stubImage.Height);
            var fontColor   = !string.IsNullOrWhiteSpace(stubImage.FontColor)
                ? Color.ParseHex(stubImage.FontColor)
                : parsedColor.InvertColor();
            image.Mutate(i =>
                         i
                         .Fill(parsedColor, polygon)
                         .ApplyScalingWaterMark(font, stubImage.Text, fontColor, 5, stubImage.WordWrap));
            using var ms = new MemoryStream();
            switch (stubImage.Type)
            {
            case ResponseImageType.Bmp:
                await image.SaveAsBmpAsync(ms);

                break;

            case ResponseImageType.Gif:
                await image.SaveAsGifAsync(ms);

                break;

            case ResponseImageType.Jpeg:
                await image.SaveAsJpegAsync(ms, new JpegEncoder { Quality = stubImage.JpegQuality });

                break;

            default:
                await image.SaveAsPngAsync(ms);

                break;
            }

            bytes = ms.ToArray();
            _fileService.WriteAllBytes(cacheFilePath, bytes);
        }

        response.Body = bytes;
        return(StubResponseWriterResultModel.IsExecuted(GetType().Name));
    }