The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Haineko::SMTPD::Milter::Nyaa;
use strict;
use warnings;
use parent 'Haineko::SMTPD::Milter';

sub body {
    my $class = shift;
    my $nekor = shift || return 1;  # (Haineko::SMTPD::Response) Object
    my $argvs = shift // return 1;  # (Ref->Scalar) Email body
    my $nyaaa = undef;

    return 1 unless ref $argvs;
    return 1 unless ref $argvs eq 'SCALAR';

    try {
        use Acme::Nyaa;
        $nyaaa  = Acme::Nyaa->new;
        $$argvs = $nyaaa->straycat( [ $$argvs ] );
        utf8::decode $$argvs unless utf8::is_utf8 $$argvs;
        return 1;
    } catch {
        return 0;
    }
}

1;
__END__

=encoding utf8

=head1 NAME

Haineko::SMTPD::Milter::Nyaa - Haineko milter for rewriting email body using
Acme::Nyaa module.

=head1 DESCRIPTION

Haineko::SMTPD::Milter::Nyaa converts email body to text like which a cat talking
using Acme::Nyaa module.

=head1 SYNOPSIS

    use Haineko::SMTPD::Milter;
    my $r = Haineko::SMTPD::Response->new;
    my $e = '猫がかわいい。';

    Haineko::SMTPD::Milter->import( [ 'Nyaa' ]);
    Haineko::SMTPD::Milter::Nyaa->body( $r, \$e );

    print $e;   # 猫がかわいいニャー

=head2 C<B<body( I<Haineko::SMTPD::Response>, I< \EMAIL_BODY > )>>

C<body()> method is for writing email body using Acme::Nyaa.

=head3 Arguments

=head4 C<B<Haineko::SMTPD::Response>> object

If your milter program rejects a message, set 1 by ->error(1), set error message
by ->message( [ 'Error message' ]), and override SMTP status code by ->code(), 
override D.S.N value by ->dsn(). Default SMTP status codes is 554, dsn is 5.6.0
in this method.

=head4 C<B<EMAIL_BODY>>

Value defined in "body" field in HTTP POST JSON data.

=head1 SEE ALSO

https://www.milter.org/developers/api/

=head1 REPOSITORY

https://github.com/azumakuniyuki/Haineko

=head1 AUTHOR

azumakuniyuki E<lt>perl.org [at] azumakuniyuki.orgE<gt>

=head1 LICENSE

This library is free software; you can redistribute it and/or modify it under 
the same terms as Perl itself.

=cut