Мое приложение настроено на отправку ответов JSON. Мне нужно добавить к нему конечную точку RSS (или что-то еще). Сериализаторов без операций не существует, хотя написать их было бы тривиально:
{ # do not use this lol
package Dancer2::Serializer::ThisIsNotAnOkayThingToDo_Raw;
use Moo;
with 'Dancer2::Core::Role::Serializer';
sub serialize { $_[1] }
sub deserialize { $_[1] }
1;
}
get '/mything/rss' => sub {
my $rss = new XML::RSS (version => '2.0');
$rss->channel(title => "Wharrgarbl");
$rss->add_item(title => "Potato");
send_as(ThisIsNotAnOkayThingToDo_Raw => $rss->as_string, {content_type => 'application/rss+xml; charset=UTF-8'});
}
Это, однако, терпит неудачу, утверждая, что __PACKAGE__::send_as
не определено (но запуск perldoc Dancer2::Manual
на сервере говорит, что send_as
должен быть там).
# __PACKAGE__ is me redacting the sensitive out of the error message
Undefined subroutine &__PACKAGE__::send_as called at...
В документации также утверждается, что send_as
использует send_file
, поэтому я попытался исключить посредника:
get '/mything/rss' => sub {
my $rss = new XML::RSS (version => '2.0');
$rss->channel(title => "Wharrgarbl");
$rss->add_item(title => "Potato");
my $xml = $rss->as_string;
send_file(\$xml, content_type => 'application/rss+xml; charset=UTF-8');
}
Однако это проходит через сериализатор:
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at .../site/lib/JSON.pm line 154.
Что?