-module(rally_runtime@codec).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/rally_runtime/codec.gleam").
-export([encode_flags/1, decode_flags/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.
?MODULEDOC(
" SSR flag serialization. Encodes a page's Model as base64 ETF for\n"
" embedding in HTML (server-side), and decodes it back during client\n"
" hydration. Delegates the actual ETF encode/decode to libero via wire.\n"
).
-file("src/rally_runtime/codec.gleam", 11).
?DOC(
" Encode any Gleam value to a base64 ETF string for embedding in HTML.\n"
" Used server-side during SSR to serialize the page model into flags.\n"
).
-spec encode_flags(any()) -> binary().
encode_flags(Value) ->
_pipe = Value,
_pipe@1 = rally_runtime@wire:encode(_pipe),
gleam_stdlib:base64_encode(_pipe@1, true).
-file("src/rally_runtime/codec.gleam", 19).
?DOC(
" Decode a base64 ETF string back to a Gleam value.\n"
" Used client-side during hydration to read the server-rendered model.\n"
).
-spec decode_flags(binary()) -> {ok, any()} | {error, nil}.
decode_flags(Flags) ->
gleam@result:'try'(case gleam@bit_array:base64_decode(Flags) of
{ok, Bits} ->
{ok, Bits};
_ ->
{error, nil}
end, fun(Bits@1) -> case rally_runtime@wire:decode_safe(Bits@1) of
{ok, Value} ->
{ok, Value};
_ ->
{error, nil}
end end).