-module(internal@encoder@base64). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/internal/encoder/base64.gleam"). -export([estimate_encoded_size/1, encode_string/3]). -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( " Encode base64 strings according to RFC 2045.\n" "\n" " See the following link for reference:\n" " - \n" ). -file("src/internal/encoder/base64.gleam", 14). ?DOC(" Estimates the base64 encoded size of a string in bytes.\n"). -spec estimate_encoded_size(binary()) -> {ok, integer()} | {error, internal@encoder@encoding:encoder_error()}. estimate_encoded_size(String) -> {ok, (erlang:byte_size(String) * 8) div 6}. -file("src/internal/encoder/base64.gleam", 38). -spec chunk(list(binary()), integer(), integer()) -> list(binary()). chunk(Characters, Used_size, Chunk_size) -> _pipe = Characters, _pipe@1 = gleam@list:fold( _pipe, {Used_size, []}, fun(Accumulator, Character) -> {Used_size@1, Chunks} = Accumulator, Character_size = erlang:byte_size(Character), case Chunks of [] -> {Character_size, [Character]}; [Chunk | Other_chunks] when (Used_size@1 + Character_size) =< Chunk_size -> {Used_size@1 + Character_size, [<> | Other_chunks]}; Chunks@1 -> {Character_size, [Character | Chunks@1]} end end ), _pipe@2 = gleam@pair:second(_pipe@1), lists:reverse(_pipe@2). -file("src/internal/encoder/base64.gleam", 23). ?DOC( " Base64 encode a string, taking the preferred line size into\n" " account and pretending to start the first line at the passed\n" " start position.\n" ). -spec encode_string(binary(), integer(), integer()) -> {ok, list(binary())} | {error, internal@encoder@encoding:encoder_error()}. encode_string(String, Position, Preferred_size) -> Chunk_size = (Preferred_size * 6) div 8, _pipe = String, _pipe@1 = gleam@string:split(_pipe, <<""/utf8>>), _pipe@2 = chunk(_pipe@1, Position, Chunk_size), _pipe@3 = gleam@list:map(_pipe@2, fun gleam_stdlib:identity/1), _pipe@4 = gleam@list:map( _pipe@3, fun(_capture) -> gleam_stdlib:base64_encode(_capture, true) end ), {ok, _pipe@4}.