import gleam/dynamic.{type Dynamic}
import http_server_mock/server_adapter.{type ServerAdapter, ServerAdapter}
/// Returns the JavaScript/Node.js server adapter.
///
/// Pass this to `http_server_mock.new/1` to create a mock server backed by a
/// Node.js Worker thread:
///
/// ```gleam
/// let server =
/// http_server_mock.new(http_server_mock_js.server())
/// |> http_server_mock.start()
/// ```
pub fn server() -> ServerAdapter {
ServerAdapter(
start: do_start,
stop: do_stop,
add_stub: do_add_stub,
remove_stub: do_remove_stub,
clear_stubs: do_clear_stubs,
get_stubs: do_get_stubs,
get_requests: do_get_requests,
clear_requests: do_clear_requests,
)
}
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "startServer")
fn do_start(port: Int) -> Result(#(Int, Dynamic), String)
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "stopServer")
fn do_stop(handle: Dynamic) -> Nil
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "addStub")
fn do_add_stub(handle: Dynamic, stub_json: String) -> Result(String, String)
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "removeStub")
fn do_remove_stub(handle: Dynamic, id: String) -> Nil
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "clearStubs")
fn do_clear_stubs(handle: Dynamic) -> Nil
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "getStubs")
fn do_get_stubs(handle: Dynamic) -> String
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "getRequests")
fn do_get_requests(handle: Dynamic) -> String
@external(javascript, "./http_server_mock/internal/server_ffi.mjs", "clearRequests")
fn do_clear_requests(handle: Dynamic) -> Nil