summaryrefslogtreecommitdiff
path: root/lib/Ultramarine/Serialiser/XML.pm6
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Ultramarine/Serialiser/XML.pm6')
-rw-r--r--lib/Ultramarine/Serialiser/XML.pm630
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/Ultramarine/Serialiser/XML.pm6 b/lib/Ultramarine/Serialiser/XML.pm6
new file mode 100644
index 0000000..7bb14b8
--- /dev/null
+++ b/lib/Ultramarine/Serialiser/XML.pm6
@@ -0,0 +1,30 @@
+use v6.d.PREVIEW;
+use Cro::HTTP::BodySerializer;
+use XML::Writer;
+
+class Ultramarine::Serialiser::XML
+ does Cro::HTTP::BodySerializer {
+
+ method is-applicable(Cro::HTTP::Message $message, $body --> Bool) {
+ with $message.content-type {
+ (.type eq 'application' && .subtype eq 'xml' || .suffix eq 'xml') &&
+ ($body ~~ Map || $body ~~ List)
+ }
+ else {
+ False
+ }
+ }
+
+ method serialize(Cro::HTTP::Message $message, $body --> Supply) {
+ my $xml = XML::Writer.serialize(
+ subsonic-response => [
+ :xmlns<http://subsonic.org/restapi>,
+ :version<1.13.0>,
+ |$body,
+ ],
+ ).encode('utf-8');
+ self!set-content-length($message, $xml.bytes);
+ supply { emit $xml }
+ }
+
+}