aboutsummaryrefslogtreecommitdiff
path: root/src/momoka.gleam
blob: 1f67663e963f07bbe5c620288db531abb4eae995 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import envoy
import gemini
import gleam/bit_array
import gleam/erlang/process
import gleam/int
import gleam/io
import gleam/option.{None}
import gleam/otp/actor
import gleam/string
import glisten.{Packet}
import tcp

pub fn main() {
  let assert Ok(_) =
    glisten.handler(
      fn(_connection) { #(Nil, None) },
      fn(message, state, connection) {
        let assert Packet(message) = message
        let assert Ok(_) =
          glisten.send(connection, gemini.get_gemtext_from_capsule(message))
        let assert Ok(_) = tcp.close_connection(connection)

        io.println(
          "request: "
          <> {
            case bit_array.to_string(message) {
              Ok(path) ->
                case path |> string.replace("\r\n", "") {
                  "" -> "/"
                  path -> path
                }
              _ -> "unknown"
            }
          },
        )

        actor.continue(state)
      },
    )
    |> glisten.serve(case envoy.get("PORT") {
      Ok(port) -> {
        case int.base_parse(port, 10) {
          Ok(port) -> port
          _ -> 70
        }
      }
      _ -> 70
    })

  process.sleep_forever()
}