private static async Task Run_Impl(
            bool checkCache,
            ILogger log,
            ExecutionContext context
            )
        {
            ConfigurationUtils.Initialize(context, log);

            var responseToken = await API.GetSireneAccessToken.RunAsync(
                new API.GetSireneAccessTokenRequest(checkCache),
                API.GetSireneAccessToken.GetLocalCacheKey,
                async (key) =>
            {
                string json = await StorageUtils.ReadContentAsync($"{StorageUtils.CacheContainerName}/{key}");

                return(json == null ? null : JsonConvert.DeserializeObject <API.GetSireneAccessTokenResponse>(json, JsonUtils.SerializerSettings));
            },
                async (key, token) => await StorageUtils.WriteContentAsync($"{StorageUtils.CacheContainerName}/{key}", token == null ? null : JsonConvert.SerializeObject(token))
                );

            if (!responseToken.IsValid)
            {
                log.LogError("Failed to get Sirene access token");
            }
        }
        private static async Task <IActionResult> Run_Impl(
            API.QuerySireneRequest request,
            ILogger log,
            ExecutionContext context
            )
        {
            ConfigurationUtils.Initialize(context, log);

            if (!API.QuerySireneRequest.CheckValidity(request?.Siren, request?.Siret))
            {
                return(new BadRequestObjectResult($"Please pass a valid {nameof(API.QuerySireneRequest)} object"));
            }

            #region Get Sirene Access Token
            {
                // Last chance to get a valid Sirene access token.
                // Stored token should always be valid if `RefreshSireneAccessToken` timer trigger is properly executed.
                var responseToken = await API.GetSireneAccessToken.RunAsync(
                    new API.GetSireneAccessTokenRequest(),
                    API.GetSireneAccessToken.GetLocalCacheKey,
                    async (key) =>
                {
                    string json = await StorageUtils.ReadContentAsync($"{StorageUtils.CacheContainerName}/{key}");
                    return(json == null ? null : JsonConvert.DeserializeObject <API.GetSireneAccessTokenResponse>(json, JsonUtils.SerializerSettings));
                },
                    async (key, token) => await StorageUtils.WriteContentAsync($"{StorageUtils.CacheContainerName}/{key}", JsonConvert.SerializeObject(token))
                    );

                if (!responseToken.IsValid)
                {
                    log.LogError("Failed to get Sirene access token");
                    return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
                }

                request = new API.QuerySireneRequest(responseToken.Token, request.Siren, request.Siret);
            }
            #endregion

            try
            {
                var response = await API.QuerySirene.RunAsync(request);

                log.LogDebug(JsonConvert.SerializeObject(response));

                return((ActionResult) new OkObjectResult(response));
            }
            catch (Exception e)
            {
                log.LogError(e.ToString());

                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }