NAME
    `IO::Async::JSONStream' - send or receive lines of JSON data in
    `IO::Async'

SYNOPSIS
     use IO::Async::JSONStream;

     use IO::Async::Loop;
     my $loop = IO::Async::Loop->new;

     my $jsonstream = IO::Async::JSONStream->new;
     $loop->add( $jsonstream );

     $jsonstream->connect(
        host    => "my.server",
        service => 12345,
     )->then( sub {
        $jsonstream->write_json( [ data => { goes => "here" } ] );
        $jsonstream->read_json
     })->on_done( sub {
        my ( $data ) = @_;

        print "Received the data $data\n";
     })->get;

DESCRIPTION
    This subclass of IO::Async::Stream implements a simple JSON-encoded data
    stream, sending and receiving Perl data structures by JSON-encoded lines
    of text.

EVENTS
    The following events are invoked, either using subclass methods or CODE
    references in parameters:

  on_json $data
    Invoked when a line of JSON-encoded data is received. It is passed the
    decoded data as a regular Perl data structure.

  on_json_error $error
    Invoked when a line is received but JSON decoding fails. It is passed
    the failure exception from the JSON decoder.

PARAMETERS
    The following named parameters may be passed to `new' or `configure':

    on_json => CODE
    on_json_error => CODE
            CODE references for event handlers.

    eol => STRING
            Optional. Sets the string used for the line ending on the stream
            when writing JSON. Defaults to `\n' if not given.

METHODS
  $jsonstream->write_json( $data, %args )
    Writes a new line of JSON-encoded data from the given Perl data
    structure.

    Other arguments are passed to the `write' method. Returns a `Future'
    which will complete when the line is flushed.

  $jsonstream->read_json ==> $data
    Returns a Future that will yield the next line of JSON-encoded data to
    be read from the stream. This takes place instead of the `on_json'
    event.

    If a JSON decoding error occurs it will result in a failed Future with
    the operation name `json' and the line on which decoding failed as its
    argument.

AUTHOR
    Paul Evans <leonerd@leonerd.org.uk>

    Incremental parsing support added by Frew Schmidt

