Help language development. Donate to The Perl Foundation

Email::MIME cpan:RBT last updated on 2021-05-05

lib/Email/MIME/Encoder/Base64Native.pm6
use v6;
unit class Email::MIME::Encoder::Base64Native;

has &!base64-encode = (try require Base64::Native) !=== Nil
    ?? ::('Base64::Native::&base64-encode')
    !! sub () { die 'Base64::Native not installed. Can\'t use Email::MIME::Encode::Base64Native.' };
has &!base64-decode = (try require Base64::Native) !=== Nil
    ?? ::('Base64::Native::&base64-decode')
    !! sub () { die 'Base64::Native not installed. Can\'t use Email::MIME::Encode::Base64Native.' };

method encode($text, :$mime-header) {
    my $enc = &!base64-encode($text, :str);
    if $mime-header {
        return $enc;
    }
    else {
        my $max-line-len = 76;
        my $lstr = '';
        my $pos = 0;
        my $len = $enc.chars;
        while $pos + $max-line-len < $len {
            $lstr ~= $enc.substr: $pos, $max-line-len;
            $lstr ~= "\n";
            $pos += $max-line-len;
        }
        $lstr ~= $enc.substr: $pos;
        return $lstr;
    }
}

method decode($encoded) {
    return &!base64-decode($encoded).decode;
}