Packages

Erlang wrapper for Rust's cargo build tool

Current section

Files

Jump to
cargo src cargo_opts.erl
Raw

src/cargo_opts.erl

-module(cargo_opts).
-export_type([
params/0,
t/0
]).
-export([
new/1,
toolchain/1,
path/1,
target/1,
release/1,
release/2,
target_dir/1,
target_dir/2
]).
-record(opts, {
path :: file:name_all(),
release :: boolean(),
toolchain :: binary() | undefined,
target :: binary() | undefined,
target_dir :: binary() | undefined
}).
-type params() :: #{
path := file:name_all(),
release := boolean(),
toolchain := binary(),
target := binary(),
target_dir := binary()
}.
-opaque t() :: #opts{}.
%% @private
-spec new(params()) -> t().
new(Opts) ->
Path = maps:get(path, Opts),
Release = maps:get(release, Opts, false),
Toolchain = maps:get(toolchain, Opts, undefined),
Target = maps:get(target, Opts, undefined),
TargetDir = maps:get(target_dir, Opts, undefined),
#opts{
path = Path,
release = Release,
toolchain = Toolchain,
target = Target,
target_dir = TargetDir
}.
-spec toolchain(t()) -> binary() | undefined.
toolchain(#opts{toolchain = Toolchain}) ->
Toolchain.
-spec release(t()) -> boolean().
release(#opts{release = Release}) ->
Release.
-spec release(t(), boolean()) -> t().
release(O, Release) ->
O#opts{release = Release}.
-spec path(t()) -> file:filename_all().
path(#opts{path = Path}) ->
Path.
-spec target(t()) -> binary() | undefined.
target(#opts{target = Target}) ->
Target.
-spec target_dir(t()) -> binary() | undefined.
target_dir(#opts{target_dir = TargetDir}) ->
TargetDir.
-spec target_dir(t(), binary()) -> t().
target_dir(O, TargetDir) ->
O#opts{target_dir = TargetDir}.