๐Ÿ‘ฉโ€๐Ÿš’ Firefighters API written in Gleam!
lustre gleam
at main 50 lines 1.4 kB view raw
1import envoy 2import filepath as path 3import gleam/erlang/process 4import gleam/result 5import pog 6import server/context.{Context} 7import server/router 8import server/seed 9import server/supervision_tree 10import wisp 11 12pub fn main() -> Nil { 13 wisp.configure_logger() 14 15 let db_process_name = process.new_name("db_conn") 16 let db = pog.named_connection(db_process_name) 17 18 let assert Ok(static_directory) = static_directory() 19 let assert Ok(secret_key) = envoy.get("SECRET_KEY") 20 let assert Ok(pog_config) = read_connection_uri(db_process_name) 21 22 let ctx = Context(db:, static_directory:, secret_key:) 23 let handler = router.handle_request(_, ctx) 24 25 let assert Ok(_) = supervision_tree.init(pog_config, handler, secret_key) 26 let assert Ok(_) = seed.germinate(ctx) 27 28 // All done! 29 process.sleep_forever() 30} 31 32/// Reads the postgres connection string from the environment 33/// 34/// ## Example 35/// 36/// ```sh 37/// DATABASE_URL="postgresql://user:password@host:port/database" 38/// ``` 39pub fn read_connection_uri( 40 name: process.Name(pog.Message), 41) -> Result(pog.Config, Nil) { 42 use postgres_uri <- result.try(envoy.get("DATABASE_URL")) 43 pog.url_config(name, postgres_uri) 44} 45 46/// Path to the application priv directory 47pub fn static_directory() -> Result(String, Nil) { 48 use priv <- result.map(wisp.priv_directory("server")) 49 path.join(priv, "static") 50}