Skip to content

Commit

Permalink
use glisten stuff and add server wrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
rawhat committed May 29, 2024
1 parent 02e9553 commit 1974d73
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 16 deletions.
7 changes: 4 additions & 3 deletions examples/complete/manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ packages = [
{ name = "gleam_otp", version = "0.10.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "0B04FE915ACECE539B317F9652CAADBBC0F000184D586AAAF2D94C100945D72B" },
{ name = "gleam_stdlib", version = "0.38.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "663CF11861179AF415A625307447775C09404E752FF99A24E2057C835319F1BE" },
{ name = "gleeunit", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "72CDC3D3F719478F26C4E2C5FED3E657AC81EC14A47D2D2DEBB8693CA3220C3B" },
{ name = "glisten", version = "2.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib"], otp_app = "glisten", source = "hex", outer_checksum = "CF3A9383E9BA4A8CBAF2F7B799716290D02F2AC34E7A77556B49376B662B9314" },
{ name = "gramps", version = "2.0.2", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "99A1BC8462E502282097D92CD7053043B714B91DC78E8AEB7D86AB8FF71E016F" },
{ name = "glisten", version = "3.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "AEB79A7244CB553A52974EDB87E652607E82749E4EC84B47B1F1BC926F1673C8" },
{ name = "gramps", version = "2.0.3", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "3CCAA6E081225180D95C79679D383BBF51C8D1FDC1B84DA1DA444F628C373793" },
{ name = "hpack_erl", version = "0.3.0", build_tools = ["rebar3"], requirements = [], otp_app = "hpack", source = "hex", outer_checksum = "D6137D7079169D8C485C6962DFE261AF5B9EF60FBC557344511C1E65E3D95FB0" },
{ name = "logging", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "logging", source = "hex", outer_checksum = "A996064F04EF6E67F0668FD0ACFB309830B05D0EE3A0C11BBBD2D4464334F792" },
{ name = "mist", version = "1.1.0", build_tools = ["gleam"], requirements = ["birl", "gleam_erlang", "gleam_http", "gleam_otp", "gleam_stdlib", "glisten", "gramps", "hpack_erl", "logging"], source = "local", path = "../.." },
{ name = "mist", version = "1.2.0", build_tools = ["gleam"], requirements = ["birl", "gleam_erlang", "gleam_http", "gleam_otp", "gleam_stdlib", "glisten", "gramps", "hpack_erl", "logging"], source = "local", path = "../.." },
{ name = "ranger", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "ranger", source = "hex", outer_checksum = "1566C272B1D141B3BBA38B25CB761EF56E312E79EC0E2DFD4D3C19FB0CC1F98C" },
{ name = "telemetry", version = "1.2.1", build_tools = ["rebar3"], requirements = [], otp_app = "telemetry", source = "hex", outer_checksum = "DAD9CE9D8EFFC621708F99EAC538EF1CBE05D6A874DD741DE2E689C47FEAFED5" },
]

[requirements]
Expand Down
2 changes: 1 addition & 1 deletion examples/complete/src/complete.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ pub fn main() {
}
}
|> mist.new
|> mist.port(3000)
|> mist.port(0)
|> mist.start_http

process.sleep_forever()
Expand Down
2 changes: 1 addition & 1 deletion gleam.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ gleam_erlang = "~> 0.24"
gleam_http = "~> 3.5"
gleam_otp = "~> 0.9"
gleam_stdlib = "~> 0.35 or ~> 1.0"
glisten = "~> 2.0"
glisten = ">= 3.0.0 and < 4.0.0"
gramps = "~> 2.0"
hpack_erl = "~> 0.3"
logging = "~> 1.0"
Expand Down
7 changes: 4 additions & 3 deletions manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ packages = [
{ name = "gleam_otp", version = "0.10.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "0B04FE915ACECE539B317F9652CAADBBC0F000184D586AAAF2D94C100945D72B" },
{ name = "gleam_stdlib", version = "0.38.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "663CF11861179AF415A625307447775C09404E752FF99A24E2057C835319F1BE" },
{ name = "gleeunit", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "72CDC3D3F719478F26C4E2C5FED3E657AC81EC14A47D2D2DEBB8693CA3220C3B" },
{ name = "glisten", version = "2.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib"], otp_app = "glisten", source = "hex", outer_checksum = "CF3A9383E9BA4A8CBAF2F7B799716290D02F2AC34E7A77556B49376B662B9314" },
{ name = "gramps", version = "2.0.2", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "99A1BC8462E502282097D92CD7053043B714B91DC78E8AEB7D86AB8FF71E016F" },
{ name = "glisten", version = "3.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "AEB79A7244CB553A52974EDB87E652607E82749E4EC84B47B1F1BC926F1673C8" },
{ name = "gramps", version = "2.0.3", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "3CCAA6E081225180D95C79679D383BBF51C8D1FDC1B84DA1DA444F628C373793" },
{ name = "hackney", version = "1.20.1", build_tools = ["rebar3"], requirements = ["certifi", "idna", "metrics", "mimerl", "parse_trans", "ssl_verify_fun", "unicode_util_compat"], otp_app = "hackney", source = "hex", outer_checksum = "FE9094E5F1A2A2C0A7D10918FEE36BFEC0EC2A979994CFF8CFE8058CD9AF38E3" },
{ name = "hpack_erl", version = "0.3.0", build_tools = ["rebar3"], requirements = [], otp_app = "hpack", source = "hex", outer_checksum = "D6137D7079169D8C485C6962DFE261AF5B9EF60FBC557344511C1E65E3D95FB0" },
{ name = "idna", version = "6.1.1", build_tools = ["rebar3"], requirements = ["unicode_util_compat"], otp_app = "idna", source = "hex", outer_checksum = "92376EB7894412ED19AC475E4A86F7B413C1B9FBB5BD16DCCD57934157944CEA" },
Expand All @@ -22,6 +22,7 @@ packages = [
{ name = "parse_trans", version = "3.4.1", build_tools = ["rebar3"], requirements = [], otp_app = "parse_trans", source = "hex", outer_checksum = "620A406CE75DADA827B82E453C19CF06776BE266F5A67CFF34E1EF2CBB60E49A" },
{ name = "ranger", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "ranger", source = "hex", outer_checksum = "1566C272B1D141B3BBA38B25CB761EF56E312E79EC0E2DFD4D3C19FB0CC1F98C" },
{ name = "ssl_verify_fun", version = "1.1.7", build_tools = ["mix", "rebar3", "make"], requirements = [], otp_app = "ssl_verify_fun", source = "hex", outer_checksum = "FE4C190E8F37401D30167C8C405EDA19469F34577987C76DDE613E838BBC67F8" },
{ name = "telemetry", version = "1.2.1", build_tools = ["rebar3"], requirements = [], otp_app = "telemetry", source = "hex", outer_checksum = "DAD9CE9D8EFFC621708F99EAC538EF1CBE05D6A874DD741DE2E689C47FEAFED5" },
{ name = "unicode_util_compat", version = "0.7.0", build_tools = ["rebar3"], requirements = [], otp_app = "unicode_util_compat", source = "hex", outer_checksum = "25EEE6D67DF61960CF6A794239566599B09E17E668D3700247BC498638152521" },
]

Expand All @@ -33,7 +34,7 @@ gleam_http = { version = "~> 3.5" }
gleam_otp = { version = "~> 0.9" }
gleam_stdlib = { version = "~> 0.35 or ~> 1.0" }
gleeunit = { version = "~> 1.0" }
glisten = { version = "~> 2.0" }
glisten = { version = ">= 3.0.0 and < 4.0.0"}
gramps = { version = "~> 2.0" }
hpack_erl = { version = "~> 0.3" }
logging = { version = "~> 1.0" }
47 changes: 39 additions & 8 deletions src/mist.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -361,17 +361,37 @@ fn convert_body_types(
response.set_body(resp, new_body)
}

pub type Port {
Assigned
Provided(Int)
}

pub opaque type Server {
Server(supervisor: Subject(supervisor.Message))
}

/// Start a `mist` service over HTTP with the provided builder.
pub fn start_http(
builder: Builder(Connection, ResponseData),
) -> Result(Subject(supervisor.Message), glisten.StartError) {
) -> Result(Server, glisten.StartError) {
fn(req) { convert_body_types(builder.handler(req)) }
|> handler.with_func
|> glisten.handler(handler.init, _)
|> glisten.serve(builder.port)
|> result.map(fn(subj) {
builder.after_start(builder.port, Http)
subj
|> result.map(fn(server) {
case glisten.get_port(server) {
Ok(port) -> {
builder.after_start(port, Http)
Server(glisten.get_supervisor(server))
}
Error(reason) -> {
logging.log(
logging.Error,
"Failed to read port from socket: " <> string.inspect(reason),
)
panic
}
}
})
}

Expand All @@ -398,7 +418,7 @@ pub fn start_https(
builder: Builder(Connection, ResponseData),
certfile certfile: String,
keyfile keyfile: String,
) -> Result(Subject(supervisor.Message), HttpsError) {
) -> Result(Server, HttpsError) {
let cert = file.open(bit_array.from_string(certfile))
let key = file.open(bit_array.from_string(keyfile))

Expand All @@ -415,9 +435,20 @@ pub fn start_https(
|> handler.with_func
|> glisten.handler(handler.init, _)
|> glisten.serve_ssl(builder.port, certfile, keyfile)
|> result.map(fn(subj) {
builder.after_start(builder.port, Https)
subj
|> result.map(fn(server) {
case glisten.get_port(server) {
Ok(port) -> {
builder.after_start(port, Https)
Server(glisten.get_supervisor(server))
}
Error(reason) -> {
logging.log(
logging.Error,
"Failed to read port from socket: " <> string.inspect(reason),
)
panic
}
}
})
|> result.map_error(GlistenError)
}
Expand Down

0 comments on commit 1974d73

Please sign in to comment.