-module(spruce@message). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/spruce/message.gleam"). -export([default_options/0, with_details/2, with_symbol_mode/2, label/0, badge/0, simple/0, custom/1, with_formatter/2, success/2, success_with/3, fail/2, fail_with/3, start/2, start_with/3, ready/2, ready_with/3, info/2, info_with/3, warn/2, warn_with/3, error/2, error_with/3, print_success/2, print_fail/2, print_start/2, print_ready/2, print_info/2, print_warn/2, print_error/2, line_with/4]). -export_type([kind/0, options/0, formatter/0, format_kind/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. ?MODULEDOC( " Semantic one-line messages: success, fail, start, ready, info, warn, error.\n" "\n" " Each function returns a formatted line (icon + label + text), indented to\n" " the context's depth and styled when the context supports color. The\n" " `print_*` variants write the line to stdout.\n" ). -type kind() :: success | fail | start | ready | info | warn | error. -opaque options() :: {options, gleam@option:option(spruce@details:details()), spruce@symbol:mode(), gleam@option:option(formatter())}. -opaque formatter() :: {formatter, format_kind()}. -type format_kind() :: label | badge | simple | {custom, fun((kind(), spruce:spruce()) -> binary())}. -file("src/spruce/message.gleam", 48). ?DOC(" Create default message rendering options.\n"). -spec default_options() -> options(). default_options() -> {options, none, unicode, none}. -file("src/spruce/message.gleam", 53). ?DOC(" Include key-value details after the message text.\n"). -spec with_details(options(), spruce@details:details()) -> options(). with_details(Options, Details) -> {options, {some, Details}, erlang:element(3, Options), erlang:element(4, Options)}. -file("src/spruce/message.gleam", 58). ?DOC(" Select whether message status glyphs render as Unicode or ASCII.\n"). -spec with_symbol_mode(options(), spruce@symbol:mode()) -> options(). with_symbol_mode(Options, Mode) -> {options, erlang:element(2, Options), Mode, erlang:element(4, Options)}. -file("src/spruce/message.gleam", 63). ?DOC(" Render the message prefix as icon plus lowercase label, e.g. `✔ success`.\n"). -spec label() -> formatter(). label() -> {formatter, label}. -file("src/spruce/message.gleam", 68). ?DOC(" Render the message prefix as an uppercase bracketed badge, e.g. `[SUCCESS]`.\n"). -spec badge() -> formatter(). badge() -> {formatter, badge}. -file("src/spruce/message.gleam", 73). ?DOC(" Render the message prefix as an uppercase bare label, e.g. `SUCCESS`.\n"). -spec simple() -> formatter(). simple() -> {formatter, simple}. -file("src/spruce/message.gleam", 78). ?DOC(" Render the message prefix with a caller-supplied function.\n"). -spec custom(fun((kind(), spruce:spruce()) -> binary())) -> formatter(). custom(Render) -> {formatter, {custom, Render}}. -file("src/spruce/message.gleam", 83). ?DOC(" Select a message prefix formatter.\n"). -spec with_formatter(options(), formatter()) -> options(). with_formatter(Options, Formatter) -> {options, erlang:element(2, Options), erlang:element(3, Options), {some, Formatter}}. -file("src/spruce/message.gleam", 270). -spec details_suffix( spruce:spruce(), gleam@option:option(spruce@details:details()) ) -> binary(). details_suffix(Sp, Maybe_details) -> case Maybe_details of none -> <<""/utf8>>; {some, Detail_values} -> case spruce@details:render(Sp, Detail_values) of <<""/utf8>> -> <<""/utf8>>; Rendered -> <<" "/utf8, Rendered/binary>> end end. -file("src/spruce/message.gleam", 294). -spec uppercase(binary()) -> binary(). uppercase(Label) -> case Label of <<"success"/utf8>> -> <<"SUCCESS"/utf8>>; <<"fail"/utf8>> -> <<"FAIL"/utf8>>; <<"start"/utf8>> -> <<"START"/utf8>>; <<"ready"/utf8>> -> <<"READY"/utf8>>; <<"info"/utf8>> -> <<"INFO"/utf8>>; <<"warn"/utf8>> -> <<"WARN"/utf8>>; <<"error"/utf8>> -> <<"ERROR"/utf8>>; _ -> Label end. -file("src/spruce/message.gleam", 282). -spec properties(kind()) -> {spruce@symbol:status(), spruce@style:color(), binary()}. properties(Kind) -> case Kind of success -> {success, green, <<"success"/utf8>>}; fail -> {error, red, <<"fail"/utf8>>}; start -> {start, magenta, <<"start"/utf8>>}; ready -> {success, green, <<"ready"/utf8>>}; info -> {info, cyan, <<"info"/utf8>>}; warn -> {warn, yellow, <<"warn"/utf8>>}; error -> {error, red, <<"error"/utf8>>} end. -file("src/spruce/message.gleam", 265). -spec render_simple(spruce:spruce(), kind()) -> binary(). render_simple(Sp, Kind) -> {_, Color, Label} = properties(Kind), spruce@style:render( Sp, begin _pipe = spruce@style:new(), spruce@style:fg(_pipe, Color) end, uppercase(Label) ). -file("src/spruce/message.gleam", 256). -spec render_badge(spruce:spruce(), kind()) -> binary(). render_badge(Sp, Kind) -> {_, Color, Label} = properties(Kind), spruce@style:render( Sp, begin _pipe = spruce@style:new(), _pipe@1 = spruce@style:bold(_pipe), spruce@style:fg(_pipe@1, Color) end, <<<<"["/utf8, (uppercase(Label))/binary>>/binary, "]"/utf8>> ). -file("src/spruce/message.gleam", 223). -spec render_default_prefix(spruce:spruce(), kind(), spruce@symbol:mode()) -> binary(). render_default_prefix(Sp, Kind, Symbol_mode) -> {Status, Color, Label} = properties(Kind), Icon = spruce@symbol:status(Symbol_mode, Status), case spruce:supports_color(Sp) of false -> <<<>/binary, Label/binary>>; true -> Colored = begin _pipe = spruce@style:new(), spruce@style:fg(_pipe, Color) end, <<<<(spruce@style:render(Sp, Colored, Icon))/binary, " "/utf8>>/binary, (spruce@style:render(Sp, spruce@style:bold(Colored), Label))/binary>> end. -file("src/spruce/message.gleam", 242). -spec render_formatter( spruce:spruce(), formatter(), kind(), spruce@symbol:mode() ) -> binary(). render_formatter(Sp, Formatter, Kind, Symbol_mode) -> case erlang:element(2, Formatter) of label -> render_default_prefix(Sp, Kind, Symbol_mode); badge -> render_badge(Sp, Kind); simple -> render_simple(Sp, Kind); {custom, Render} -> Render(Kind, Sp) end. -file("src/spruce/message.gleam", 206). -spec line_options(spruce:spruce(), kind(), binary(), options()) -> binary(). line_options(Sp, Kind, Text, Options) -> Prefix = spruce@internal@layout:indent_prefix(Sp), Rendered_prefix = case erlang:element(4, Options) of none -> render_default_prefix(Sp, Kind, erlang:element(3, Options)); {some, Formatter} -> render_formatter(Sp, Formatter, Kind, erlang:element(3, Options)) end, Details_text = details_suffix(Sp, erlang:element(2, Options)), <<<<<<<>/binary, " "/utf8>>/binary, Text/binary>>/binary, Details_text/binary>>. -file("src/spruce/message.gleam", 202). -spec line(spruce:spruce(), kind(), binary()) -> binary(). line(Sp, Kind, Text) -> line_options(Sp, Kind, Text, default_options()). -file("src/spruce/message.gleam", 88). ?DOC(" Format a success message line.\n"). -spec success(spruce:spruce(), binary()) -> binary(). success(Sp, Text) -> line(Sp, success, Text). -file("src/spruce/message.gleam", 93). ?DOC(" Format a success message line with explicit rendering options.\n"). -spec success_with(spruce:spruce(), binary(), options()) -> binary(). success_with(Sp, Text, Options) -> line_options(Sp, success, Text, Options). -file("src/spruce/message.gleam", 98). ?DOC(" Format a fail message line.\n"). -spec fail(spruce:spruce(), binary()) -> binary(). fail(Sp, Text) -> line(Sp, fail, Text). -file("src/spruce/message.gleam", 103). ?DOC(" Format a fail message line with explicit rendering options.\n"). -spec fail_with(spruce:spruce(), binary(), options()) -> binary(). fail_with(Sp, Text, Options) -> line_options(Sp, fail, Text, Options). -file("src/spruce/message.gleam", 108). ?DOC(" Format a start message line.\n"). -spec start(spruce:spruce(), binary()) -> binary(). start(Sp, Text) -> line(Sp, start, Text). -file("src/spruce/message.gleam", 113). ?DOC(" Format a start message line with explicit rendering options.\n"). -spec start_with(spruce:spruce(), binary(), options()) -> binary(). start_with(Sp, Text, Options) -> line_options(Sp, start, Text, Options). -file("src/spruce/message.gleam", 118). ?DOC(" Format a ready message line.\n"). -spec ready(spruce:spruce(), binary()) -> binary(). ready(Sp, Text) -> line(Sp, ready, Text). -file("src/spruce/message.gleam", 123). ?DOC(" Format a ready message line with explicit rendering options.\n"). -spec ready_with(spruce:spruce(), binary(), options()) -> binary(). ready_with(Sp, Text, Options) -> line_options(Sp, ready, Text, Options). -file("src/spruce/message.gleam", 128). ?DOC(" Format an info message line.\n"). -spec info(spruce:spruce(), binary()) -> binary(). info(Sp, Text) -> line(Sp, info, Text). -file("src/spruce/message.gleam", 133). ?DOC(" Format an info message line with explicit rendering options.\n"). -spec info_with(spruce:spruce(), binary(), options()) -> binary(). info_with(Sp, Text, Options) -> line_options(Sp, info, Text, Options). -file("src/spruce/message.gleam", 138). ?DOC(" Format a warn message line.\n"). -spec warn(spruce:spruce(), binary()) -> binary(). warn(Sp, Text) -> line(Sp, warn, Text). -file("src/spruce/message.gleam", 143). ?DOC(" Format a warn message line with explicit rendering options.\n"). -spec warn_with(spruce:spruce(), binary(), options()) -> binary(). warn_with(Sp, Text, Options) -> line_options(Sp, warn, Text, Options). -file("src/spruce/message.gleam", 148). ?DOC(" Format an error message line.\n"). -spec error(spruce:spruce(), binary()) -> binary(). error(Sp, Text) -> line(Sp, error, Text). -file("src/spruce/message.gleam", 153). ?DOC(" Format an error message line with explicit rendering options.\n"). -spec error_with(spruce:spruce(), binary(), options()) -> binary(). error_with(Sp, Text, Options) -> line_options(Sp, error, Text, Options). -file("src/spruce/message.gleam", 158). ?DOC(" Print a success message to stdout.\n"). -spec print_success(spruce:spruce(), binary()) -> nil. print_success(Sp, Text) -> gleam_stdlib:println(success(Sp, Text)). -file("src/spruce/message.gleam", 163). ?DOC(" Print a fail message to stdout.\n"). -spec print_fail(spruce:spruce(), binary()) -> nil. print_fail(Sp, Text) -> gleam_stdlib:println(fail(Sp, Text)). -file("src/spruce/message.gleam", 168). ?DOC(" Print a start message to stdout.\n"). -spec print_start(spruce:spruce(), binary()) -> nil. print_start(Sp, Text) -> gleam_stdlib:println(start(Sp, Text)). -file("src/spruce/message.gleam", 173). ?DOC(" Print a ready message to stdout.\n"). -spec print_ready(spruce:spruce(), binary()) -> nil. print_ready(Sp, Text) -> gleam_stdlib:println(ready(Sp, Text)). -file("src/spruce/message.gleam", 178). ?DOC(" Print an info message to stdout.\n"). -spec print_info(spruce:spruce(), binary()) -> nil. print_info(Sp, Text) -> gleam_stdlib:println(info(Sp, Text)). -file("src/spruce/message.gleam", 183). ?DOC(" Print a warn message to stdout.\n"). -spec print_warn(spruce:spruce(), binary()) -> nil. print_warn(Sp, Text) -> gleam_stdlib:println(warn(Sp, Text)). -file("src/spruce/message.gleam", 188). ?DOC(" Print an error message to stdout.\n"). -spec print_error(spruce:spruce(), binary()) -> nil. print_error(Sp, Text) -> gleam_stdlib:println(error(Sp, Text)). -file("src/spruce/message.gleam", 193). ?DOC(" Format a message line with explicit rendering options.\n"). -spec line_with(spruce:spruce(), kind(), binary(), options()) -> binary(). line_with(Sp, Kind, Text, Options) -> line_options(Sp, Kind, Text, Options).