diff --git a/src/rinha_2025.gleam b/src/rinha_2025.gleam index 102d6d4..d3f3c84 100644 --- a/src/rinha_2025.gleam +++ b/src/rinha_2025.gleam @@ -12,29 +12,37 @@ import valkyrie import web/server import web/web -pub fn main() -> Nil { - let redis_host = util.get_env_var("REDIS_CONN", "localhost") - let providers_env = util.get_env_var("PROVIDERS", "") - let assert Ok(processor_time) = - util.get_env_var("PROCESSOR_TIME", "100") - |> int.parse - - let providers = - providers_env +fn get_providers() -> List(provider.ProviderConfig) { + util.get_env_var("PROVIDERS", "") |> string.split(",") - |> list.filter(fn(url) { "" != url }) - |> list.map(fn(url) { - let provider_name = case string.contains(url, contain: "default") { - True -> "default" - _ -> "fallback" - } + |> list.filter_map(fn(url) { + use <- bool.guard(when: "" == url, return: Error("invalid")) + + use <- bool.guard( + when: string.contains(url, contain: "default"), + return: Ok(#(url, "default")) + ) + + Ok(#(url, "fallback")) + }) + |> list.map(fn(data) { + let #(url, provider) = data provider.ProviderConfig( url: url, min_response_time: -1, - name: provider_name, + name: provider, ) }) - let has_providers = list.length(providers) > 0 +} + +pub fn main() -> Nil { + let redis_host = util.get_env_var("REDIS_CONN", "localhost") + let assert Ok(processor_time) = + util.get_env_var("PROCESSOR_TIME", "100") + |> int.parse + let providers = get_providers() + + let has_providers = providers != [] let #(valkey_pool_name, valkey_pool) = redis.create_supervised_pool(redis_host)