Packages

A Gleam library for interacting with the Discord API

Current section

Files

Jump to
shimmer src nerf gun.gleam
Raw

src/nerf/gun.gleam

//// Low level bindings to the gun API. You typically do not need to use this.
//// Prefer the other modules in this library.
import gleam/http.{Header}
import gleam/erlang/charlist.{Charlist}
import gleam/dynamic.{Dynamic}
pub external type StreamReference
pub external type ConnectionPid
pub fn open(host: String, port: Int) -> Result(ConnectionPid, Dynamic) {
open_erl(charlist.from_string(host), port)
}
pub external fn open_erl(Charlist, Int) -> Result(ConnectionPid, Dynamic) =
"nerf_ffi" "ws_open"
pub external fn await_up(ConnectionPid) -> Result(Dynamic, Dynamic) =
"gun" "await_up"
pub external fn ws_upgrade(
ConnectionPid,
String,
List(Header),
) -> StreamReference =
"gun" "ws_upgrade"
pub type Frame {
Close
Text(String)
Binary(BitString)
}
external type OkAtom
external fn ws_send_erl(ConnectionPid, Frame) -> OkAtom =
"gun" "ws_send"
pub fn ws_send(pid: ConnectionPid, frame: Frame) -> Nil {
ws_send_erl(pid, frame)
Nil
}