Help language development. Donate to The Perl Foundation
A Cro::HTTP::BodySerializer that knows about JSON::Class objects
use Cro::HTTP::Router; use Cro::HTTP::Server; use JSON::Class; use Cro::HTTP::BodySerializerJSONClass; class Foo does JSON::Class { has DateTime $.date is marshalled-by('Str') = DateTime.now; } my $app = route { get -> { content 'application/json', Foo.new; } }; my Cro::Service $service = Cro::HTTP::Server.new( host => 'localhost', port => 7798, application => $app, add-body-serializers => [ Cro::HTTP::BodySerializerJSONClass] ); $service.start; react whenever signal(SIGINT) { $service.stop; exit; }
This provides a body serializer for Cro::HTTP
that allows you to pass an object that does JSON::Class
as an application/json
response body. It simply needs to be added to the body serializers with the add-body-serializers
parameter to the constructor
of the Cro::HTTP::Server
. Similarly it can be used to serialize a request body of a Cro::HTTP::Client
if the add-body-serializers
is provided to the constructor of Cro::HTTP::Client
.
It might simplify programme design by using, for example, existing objects as the response to a web request.
Assuming you have a working Rakudo installation you should be able to install this with zef :
zef install Cro::HTTP::BodySerializerJSONClass
Please feel free to post suggestions/patches/etc at Github.
This library is free software. Please see the LICENCE file in the distribution.
© Jonathan Stowe 2021