-module(opener). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -define(FILEPATH, "src/opener.gleam"). -export([open/1]). -export_type([opener/0, os_type/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type opener() :: x_d_g_open | mac_o_s_open | windows_start. -type os_type() :: linux | darwin | n_t | unknown. -file("src/opener.gleam", 40). -spec get_platform_opener() -> opener(). get_platform_opener() -> case opener_ffi:get_os() of linux -> x_d_g_open; n_t -> windows_start; darwin -> mac_o_s_open; unknown -> x_d_g_open end. -file("src/opener.gleam", 23). -spec opener_to_exec(opener()) -> fun((list(binary())) -> {ok, binary()} | {error, {integer(), binary()}}). opener_to_exec(Opener) -> case Opener of mac_o_s_open -> fun(_capture) -> opener_ffi:exec(<<"open"/utf8>>, _capture) end; windows_start -> fun(_capture@1) -> opener_ffi:exec(<<"start"/utf8>>, _capture@1) end; x_d_g_open -> fun(_capture@2) -> opener_ffi:exec(<<"xdg-open"/utf8>>, _capture@2) end end. -file("src/opener.gleam", 8). ?DOC( " Opens a target file or URL using the appropriate platform-specific opener.\n" "\n" " example:\n" " ```gleam\n" " let _ = open(\"https://gleam.run\")\n" " ```\n" ). -spec open(binary()) -> {ok, binary()} | {error, {integer(), binary()}}. open(Target) -> _pipe = get_platform_opener(), _pipe@1 = opener_to_exec(_pipe), (fun(Open) -> Open([Target]) end)(_pipe@1).