-module(internal@encoder@idna). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/internal/encoder/idna.gleam"). -export([encode_domain/2, encode_email_address/2]). -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 domain parts using Internationalized Domain Names for Applications\n" " (IDNA).\n" "\n" " See the following link for reference:\n" " - \n" ). -file("src/internal/encoder/idna.gleam", 37). -spec encode_domain(binary(), internal@encoder@encoding:encoding_mode()) -> {ok, binary()} | {error, internal@encoder@encoding:encoder_error()}. encode_domain(Domain, Mode) -> case Mode of ascii -> _pipe = glidna:to_ascii(Domain), gleam@result:replace_error(_pipe, {invalid_domain, Domain}); utf8 -> {ok, Domain} end. -file("src/internal/encoder/idna.gleam", 18). ?DOC( " Encode an email address according to IDNA encoding.\n" "\n" " It leaves the local part as is, and only encodes the domain part.\n" " If `mode` is `Utf8`, it will also leave the domain part as is.\n" ). -spec encode_email_address(binary(), internal@encoder@encoding:encoding_mode()) -> {ok, binary()} | {error, internal@encoder@encoding:encoder_error()}. encode_email_address(Address, Mode) -> _pipe = Address, _pipe@1 = gleam@string:reverse(_pipe), _pipe@2 = gleam@string:split_once(_pipe@1, <<"@"/utf8>>), _pipe@3 = gleam@result:replace_error( _pipe@2, {invalid_email_address, Address} ), _pipe@7 = gleam@result:'try'( _pipe@3, fun(Parts) -> {Domain, Local} = Parts, _pipe@4 = Domain, _pipe@5 = gleam@string:reverse(_pipe@4), _pipe@6 = encode_domain(_pipe@5, Mode), gleam@result:map( _pipe@6, fun(Domain@1) -> <<<<(gleam@string:reverse(Local))/binary, "@"/utf8>>/binary, Domain@1/binary>> end ) end ), gleam@result:replace_error(_pipe@7, {invalid_email_address, Address}).