import gleam/erlang/process import gleam/http/request import gleam/http/response import gleam/otp/actor import gleam/otp/static_supervisor as supervisor import group_registry import mist import pog import wisp import wisp/wisp_mist /// Alias for a mist http request type Request = request.Request(mist.Connection) /// Alias for a mist http response type Response = response.Response(mist.ResponseData) /// 󰪋 Start the application supervisor pub fn start( pog_config pog_config: pog.Config, wisp_handler wisp_handler: fn(wisp.Request) -> wisp.Response, ws_handler ws_handler: fn(Request) -> Response, secret_key_base secret_key_base: String, registry_name registry_name: process.Name(_), ) -> Result(actor.Started(supervisor.Supervisor), actor.StartError) { let handle_request = fn(req: Request) { case wisp.path_segments(req) { ["ws"] -> ws_handler(req) _ -> wisp_mist.handler(wisp_handler, secret_key_base)(req) } } let mist_builder = handle_request |> mist.new |> mist.bind("0.0.0.0") |> mist.port(8000) // Starting supervision supervisor.new(supervisor.OneForOne) |> supervisor.add(pog.supervised(pog_config)) |> supervisor.add(mist.supervised(mist_builder)) |> supervisor.add(group_registry.supervised(registry_name)) |> supervisor.start }