Packages
mist
0.9.0
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist.gleam
import glisten
import glisten/acceptor
import glisten/handler.{LoopFn}
import glisten/socket.{Ssl, Tcp}
import mist/handler.{State}
/// Runs an HTTP Request->Response server at the given port, with your defined
/// handler. This will automatically read the full body contents up to the
/// specified `max_body_limit` in bytes. If you'd prefer to have finer-grain
/// control over this behavior, consider using `mist.serve`.
pub fn run_service(
port: Int,
handler: handler.Handler,
max_body_limit max_body_limit: Int,
) -> Result(Nil, glisten.StartError) {
handler
|> handler.with(Tcp, max_body_limit)
|> acceptor.new_pool_with_data(handler.new_state())
|> glisten.serve(port, _)
}
/// Similar setup and behavior to `run_service`, but instead takes in the SSL
/// certificate/key and serves over HTTPS.
pub fn run_service_ssl(
port port: Int,
certfile certfile: String,
keyfile keyfile: String,
handler handler: handler.Handler,
max_body_limit max_body_limit: Int,
) -> Result(Nil, glisten.StartError) {
handler
|> handler.with(Ssl, max_body_limit)
|> acceptor.new_pool_with_data(handler.new_state())
|> glisten.serve_ssl(
port: port,
certfile: certfile,
keyfile: keyfile,
with_pool: _,
)
}
/// Slightly more flexible alternative to `run_service`. This allows hooking
/// into the `mist/http.{handler_func}` method. Note that the request body
/// will not be automatically read. You will need to call `http.read_body`.
pub fn serve(
port: Int,
handler: LoopFn(State),
) -> Result(Nil, glisten.StartError) {
handler
|> acceptor.new_pool_with_data(handler.new_state())
|> glisten.serve(port, _)
}
/// Similar to the `run_service` method, `serve` also has a similar SSL method.
pub fn serve_ssl(
port: Int,
certfile certfile: String,
keyfile keyfile: String,
handler: LoopFn(State),
) -> Result(Nil, glisten.StartError) {
handler
|> acceptor.new_pool_with_data(handler.new_state())
|> glisten.serve_ssl(
port: port,
certfile: certfile,
keyfile: keyfile,
with_pool: _,
)
}