Current section
Files
Jump to
Current section
Files
src/dagger@dsl@service.erl
-module(dagger@dsl@service).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/dagger/dsl/service.gleam").
-export([none/1, opt_port/2, opt_scheme/2, opt_kill/2, opt_cmd/2, opt_ports/2, opt_random/2, service/1, endpoint/4, hostname/3, id/1, ports/4, start/1, stop/2, sync/1, terminal/2, up/4, with_hostname/2]).
-export_type([for_up/0, for_terminal/0, for_stop/0, for_endpoint/0, opts/1]).
-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 for_up() :: any().
-type for_terminal() :: any().
-type for_stop() :: any().
-type for_endpoint() :: any().
-opaque opts(AFXJ) :: {opts,
gleam@option:option(integer()),
gleam@option:option(binary()),
gleam@option:option(boolean()),
gleam@option:option(list(binary())),
gleam@option:option(list(dagger@dsl@types:port_forward())),
gleam@option:option(boolean())} |
{gleam_phantom, AFXJ}.
-file("src/dagger/dsl/service.gleam", 26).
-spec defaults() -> opts(any()).
defaults() ->
{opts, none, none, none, none, none, none}.
-file("src/dagger/dsl/service.gleam", 37).
-spec none(opts(AFXM)) -> opts(AFXM).
none(Opts) ->
Opts.
-file("src/dagger/dsl/service.gleam", 41).
-spec opt_port(opts(for_endpoint()), integer()) -> opts(for_endpoint()).
opt_port(Opts, Val) ->
{opts,
{some, Val},
erlang:element(3, Opts),
erlang:element(4, Opts),
erlang:element(5, Opts),
erlang:element(6, Opts),
erlang:element(7, Opts)}.
-file("src/dagger/dsl/service.gleam", 45).
-spec opt_scheme(opts(for_endpoint()), binary()) -> opts(for_endpoint()).
opt_scheme(Opts, Val) ->
{opts,
erlang:element(2, Opts),
{some, Val},
erlang:element(4, Opts),
erlang:element(5, Opts),
erlang:element(6, Opts),
erlang:element(7, Opts)}.
-file("src/dagger/dsl/service.gleam", 49).
-spec opt_kill(opts(for_stop()), boolean()) -> opts(for_stop()).
opt_kill(Opts, Val) ->
{opts,
erlang:element(2, Opts),
erlang:element(3, Opts),
{some, Val},
erlang:element(5, Opts),
erlang:element(6, Opts),
erlang:element(7, Opts)}.
-file("src/dagger/dsl/service.gleam", 53).
-spec opt_cmd(opts(for_terminal()), list(binary())) -> opts(for_terminal()).
opt_cmd(Opts, Val) ->
{opts,
erlang:element(2, Opts),
erlang:element(3, Opts),
erlang:element(4, Opts),
{some, Val},
erlang:element(6, Opts),
erlang:element(7, Opts)}.
-file("src/dagger/dsl/service.gleam", 57).
-spec opt_ports(opts(for_up()), list(dagger@dsl@types:port_forward())) -> opts(for_up()).
opt_ports(Opts, Val) ->
{opts,
erlang:element(2, Opts),
erlang:element(3, Opts),
erlang:element(4, Opts),
erlang:element(5, Opts),
{some, Val},
erlang:element(7, Opts)}.
-file("src/dagger/dsl/service.gleam", 61).
-spec opt_random(opts(for_up()), boolean()) -> opts(for_up()).
opt_random(Opts, Val) ->
{opts,
erlang:element(2, Opts),
erlang:element(3, Opts),
erlang:element(4, Opts),
erlang:element(5, Opts),
erlang:element(6, Opts),
{some, Val}}.
-file("src/dagger/dsl/service.gleam", 65).
-spec service(dagger@dsl@types:service()) -> dagger@dsl@types:service().
service(Id) ->
Field = {field,
<<"loadServiceFromID"/utf8>>,
[{<<"id"/utf8>>, {g_deferred, erlang:element(2, Id)}}],
[]},
{service, {pure, [Field]}}.
-file("src/dagger/dsl/service.gleam", 70).
-spec encode_endpoint(opts(any())) -> list({binary(), dagger@types:value()}).
encode_endpoint(Opts) ->
gleam@list:filter_map([case erlang:element(2, Opts) of
{some, Val} ->
{ok, {<<"port"/utf8>>, {g_int, Val}}};
none ->
{error, nil}
end, case erlang:element(3, Opts) of
{some, Val@1} ->
{ok, {<<"scheme"/utf8>>, {g_string, Val@1}}};
none ->
{error, nil}
end], fun(X) -> X end).
-file("src/dagger/dsl/service.gleam", 86).
?DOC(
" Retrieves an endpoint that clients can use to reach this container.\n"
" If no port is specified, the first exposed port is used. If none exist an error is returned.\n"
" If a scheme is specified, a URL is returned. Otherwise, a host:port pair is returned.\n"
).
-spec endpoint(
dagger@dsl@types:service(),
fun((opts(for_endpoint())) -> opts(for_endpoint())),
dagger@types:client(),
fun(({ok, binary()} | {error, dagger@types:query_error()}) -> AFYJ)
) -> AFYJ.
endpoint(Parent, With_fn, Client, Handler) ->
Opts = With_fn(defaults()),
Field = {field, <<"endpoint"/utf8>>, encode_endpoint(Opts), []},
Op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) ->
Full_query = lists:append(Q, [Field]),
{fetch,
Full_query,
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Dyn) ->
Path = dagger@types:make_path(Full_query),
case gleam@dynamic@decode:run(
Dyn,
gleam@dynamic@decode:at(
Path,
{decoder,
fun gleam@dynamic@decode:decode_string/1}
)
) of
{ok, Val} ->
{pure, {ok, Val}};
{error, _} ->
{pure,
{error,
{decoding_error, <<"endpoint"/utf8>>}}}
end
end}
end
)
end,
Handler(dagger@interpreter:run(Op, Client)).
-file("src/dagger/dsl/service.gleam", 108).
?DOC(" Retrieves a hostname which can be used by clients to reach this container.\n").
-spec hostname(
dagger@dsl@types:service(),
dagger@types:client(),
fun(({ok, binary()} | {error, dagger@types:query_error()}) -> AFYL)
) -> AFYL.
hostname(Parent, Client, Handler) ->
Field = {field, <<"hostname"/utf8>>, [], []},
Op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) ->
Full_query = lists:append(Q, [Field]),
{fetch,
Full_query,
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Dyn) ->
Path = dagger@types:make_path(Full_query),
case gleam@dynamic@decode:run(
Dyn,
gleam@dynamic@decode:at(
Path,
{decoder,
fun gleam@dynamic@decode:decode_string/1}
)
) of
{ok, Val} ->
{pure, {ok, Val}};
{error, _} ->
{pure,
{error,
{decoding_error, <<"hostname"/utf8>>}}}
end
end}
end
)
end,
Handler(dagger@interpreter:run(Op, Client)).
-file("src/dagger/dsl/service.gleam", 129).
?DOC(" A unique identifier for this Service.\n").
-spec id(dagger@dsl@types:service()) -> dagger@dsl@types:service().
id(Parent) ->
Field = {field, <<"id"/utf8>>, [], []},
New_op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) -> {pure, lists:append(Q, [Field])} end
)
end,
{service, New_op}.
-file("src/dagger/dsl/service.gleam", 139).
?DOC(" Retrieves the list of ports provided by the service.\n").
-spec ports(
dagger@dsl@types:service(),
fun((dagger@dsl@types:port_()) -> list(dagger@types:field())),
dagger@types:client(),
fun(({ok, list(dagger@dsl@types:port_())} |
{error, dagger@types:query_error()}) -> AFYP)
) -> AFYP.
ports(Parent, Select, Client, Handler) ->
Subfields = Select({port, {pure, []}}),
Field = {field, <<"ports"/utf8>>, [], Subfields},
Op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) ->
Full_query = lists:append(Q, [Field]),
{fetch,
Full_query,
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Dyn) ->
Path = dagger@types:make_path(Full_query),
case gleam@dynamic@decode:run(
Dyn,
gleam@dynamic@decode:at(
Path,
gleam@dynamic@decode:list(
{decoder,
fun gleam@dynamic@decode:decode_dynamic/1}
)
)
) of
{ok, Items} ->
{pure,
{ok,
gleam@list:map(
Items,
fun(_) ->
{port, {pure, Full_query}}
end
)}};
{error, _} ->
{pure,
{error, {decoding_error, <<"ports"/utf8>>}}}
end
end}
end
)
end,
Handler(dagger@interpreter:run(Op, Client)).
-file("src/dagger/dsl/service.gleam", 162).
?DOC(
" Start the service and wait for its health checks to succeed.\n"
" Services bound to a Container do not need to be manually started.\n"
).
-spec start(dagger@dsl@types:service()) -> dagger@dsl@types:service().
start(Parent) ->
Field = {field, <<"start"/utf8>>, [], []},
New_op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) -> {pure, lists:append(Q, [Field])} end
)
end,
{service, New_op}.
-file("src/dagger/dsl/service.gleam", 171).
-spec encode_stop(opts(any())) -> list({binary(), dagger@types:value()}).
encode_stop(Opts) ->
gleam@list:filter_map([case erlang:element(4, Opts) of
{some, Val} ->
{ok, {<<"kill"/utf8>>, {g_bool, Val}}};
none ->
{error, nil}
end], fun(X) -> X end).
-file("src/dagger/dsl/service.gleam", 181).
?DOC(" Stop the service.\n").
-spec stop(
dagger@dsl@types:service(),
fun((opts(for_stop())) -> opts(for_stop()))
) -> dagger@dsl@types:service().
stop(Parent, With_fn) ->
Opts = With_fn(defaults()),
Field = {field, <<"stop"/utf8>>, encode_stop(Opts), []},
New_op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) -> {pure, lists:append(Q, [Field])} end
)
end,
{service, New_op}.
-file("src/dagger/dsl/service.gleam", 192).
?DOC(" Forces evaluation of the pipeline in the engine.\n").
-spec sync(dagger@dsl@types:service()) -> dagger@dsl@types:service().
sync(Parent) ->
Field = {field, <<"sync"/utf8>>, [], []},
New_op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) -> {pure, lists:append(Q, [Field])} end
)
end,
{service, New_op}.
-file("src/dagger/dsl/service.gleam", 201).
-spec encode_terminal(opts(any())) -> list({binary(), dagger@types:value()}).
encode_terminal(Opts) ->
gleam@list:filter_map([case erlang:element(5, Opts) of
{some, Val} ->
{ok,
{<<"cmd"/utf8>>,
{g_list,
gleam@list:map(Val, fun(X) -> {g_string, X} end)}}};
none ->
{error, nil}
end], fun(X@1) -> X@1 end).
-file("src/dagger/dsl/service.gleam", 211).
-spec terminal(
dagger@dsl@types:service(),
fun((opts(for_terminal())) -> opts(for_terminal()))
) -> dagger@dsl@types:service().
terminal(Parent, With_fn) ->
Opts = With_fn(defaults()),
Field = {field, <<"terminal"/utf8>>, encode_terminal(Opts), []},
New_op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) -> {pure, lists:append(Q, [Field])} end
)
end,
{service, New_op}.
-file("src/dagger/dsl/service.gleam", 221).
-spec encode_up(opts(any())) -> list({binary(), dagger@types:value()}).
encode_up(Opts) ->
gleam@list:filter_map([case erlang:element(6, Opts) of
{some, Val} ->
{ok,
{<<"ports"/utf8>>,
{g_list,
gleam@list:map(
Val,
fun(X) ->
{g_object,
dagger@dsl@types:port_forward_to_json(
X
)}
end
)}}};
none ->
{error, nil}
end, case erlang:element(7, Opts) of
{some, Val@1} ->
{ok, {<<"random"/utf8>>, {g_bool, Val@1}}};
none ->
{error, nil}
end], fun(X@1) -> X@1 end).
-file("src/dagger/dsl/service.gleam", 235).
?DOC(" Creates a tunnel that forwards traffic from the caller's network to this service.\n").
-spec up(
dagger@dsl@types:service(),
fun((opts(for_up())) -> opts(for_up())),
dagger@types:client(),
fun(({ok, nil} | {error, dagger@types:query_error()}) -> AFZG)
) -> AFZG.
up(Parent, With_fn, Client, Handler) ->
Opts = With_fn(defaults()),
Field = {field, <<"up"/utf8>>, encode_up(Opts), []},
Op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) ->
Full_query = lists:append(Q, [Field]),
{fetch,
Full_query,
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Dyn) ->
Path = dagger@types:make_path(Full_query),
case gleam@dynamic@decode:run(
Dyn,
gleam@dynamic@decode:at(
Path,
{decoder,
fun gleam@dynamic@decode:decode_dynamic/1}
)
) of
{ok, _} ->
{pure, {ok, nil}};
{error, _} ->
{pure, {error, {decoding_error, <<"up"/utf8>>}}}
end
end}
end
)
end,
Handler(dagger@interpreter:run(Op, Client)).
-file("src/dagger/dsl/service.gleam", 257).
?DOC(" Configures a hostname which can be used by clients within the session to reach this container.\n").
-spec with_hostname(dagger@dsl@types:service(), binary()) -> dagger@dsl@types:service().
with_hostname(Parent, Hostname) ->
Field = {field,
<<"withHostname"/utf8>>,
[{<<"hostname"/utf8>>, {g_string, Hostname}}],
[]},
New_op = begin
dagger@types:bind(
erlang:element(2, Parent),
fun(Q) -> {pure, lists:append(Q, [Field])} end
)
end,
{service, New_op}.