… | |
… | |
1172 | my $rbuf = \$self->{rbuf}; |
1172 | my $rbuf = \$self->{rbuf}; |
1173 | |
1173 | |
1174 | my $json = $self->{json} ||= JSON->new->utf8; |
1174 | my $json = $self->{json} ||= JSON->new->utf8; |
1175 | |
1175 | |
1176 | sub { |
1176 | sub { |
1177 | eval { |
|
|
1178 | my $ref = $json->incr_parse ($self->{rbuf}); |
1177 | my $ref = eval { $json->incr_parse ($self->{rbuf}) }; |
1179 | |
1178 | |
1180 | if ($ref) { |
1179 | if ($ref) { |
1181 | $self->{rbuf} = $json->incr_text; |
1180 | $self->{rbuf} = $json->incr_text; |
1182 | $json->incr_text = ""; |
1181 | $json->incr_text = ""; |
1183 | $cb->($self, $ref); |
1182 | $cb->($self, $ref); |
1184 | |
|
|
1185 | 1 |
|
|
1186 | } else { |
|
|
1187 | $self->{rbuf} = ""; |
|
|
1188 | () |
|
|
1189 | } |
|
|
1190 | |
1183 | |
1191 | 1 |
1184 | 1 |
1192 | } or do { |
1185 | } elsif ($@) { |
1193 | # error case |
1186 | # error case |
1194 | $json->incr_skip; |
1187 | $json->incr_skip; |
1195 | |
1188 | |
1196 | $self->{rbuf} = $json->incr_text; |
1189 | $self->{rbuf} = $json->incr_text; |
1197 | $json->incr_text = ""; |
1190 | $json->incr_text = ""; |
1198 | |
1191 | |
1199 | $self->_error (&Errno::EBADMSG); |
1192 | $self->_error (&Errno::EBADMSG); |
|
|
1193 | () |
|
|
1194 | |
|
|
1195 | } else { |
|
|
1196 | $self->{rbuf} = ""; |
|
|
1197 | () |
1200 | }; |
1198 | } |
1201 | } |
1199 | } |
1202 | }; |
1200 | }; |
1203 | |
1201 | |
1204 | =item storable => $cb->($handle, $ref) |
1202 | =item storable => $cb->($handle, $ref) |
1205 | |
1203 | |