ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CBOR-XS/README
(Generate patch)

Comparing CBOR-XS/README (file contents):
Revision 1.11 by root, Sat Nov 30 18:42:27 2013 UTC vs.
Revision 1.13 by root, Sun Jan 5 14:24:54 2014 UTC

200 the standard CBOR way. 200 the standard CBOR way.
201 201
202 This option does not affect "decode" in any way - string references 202 This option does not affect "decode" in any way - string references
203 will always be decoded properly if present. 203 will always be decoded properly if present.
204 204
205 $cbor = $cbor->validate_utf8 ([$enable])
206 $enabled = $cbor->get_validate_utf8
207 If $enable is true (or missing), then "decode" will validate that
208 elements (text strings) containing UTF-8 data in fact contain valid
209 UTF-8 data (instead of blindly accepting it). This validation
210 obviously takes extra time during decoding.
211
212 The concept of "valid UTF-8" used is perl's concept, which is a
213 superset of the official UTF-8.
214
215 If $enable is false (the default), then "decode" will blindly accept
216 UTF-8 data, marking them as valid UTF-8 in the resulting data
217 structure regardless of whether thats true or not.
218
219 Perl isn't too happy about corrupted UTF-8 in strings, but should
220 generally not crash or do similarly evil things. Extensions might be
221 not so forgiving, so it's recommended to turn on this setting if you
222 receive untrusted CBOR.
223
224 This option does not affect "encode" in any way - strings that are
225 supposedly valid UTF-8 will simply be dumped into the resulting CBOR
226 string without checking whether that is, in fact, true or not.
227
205 $cbor = $cbor->filter ([$cb->($tag, $value)]) 228 $cbor = $cbor->filter ([$cb->($tag, $value)])
206 $cb_or_undef = $cbor->get_filter 229 $cb_or_undef = $cbor->get_filter
207 Sets or replaces the tagged value decoding filter (when $cb is 230 Sets or replaces the tagged value decoding filter (when $cb is
208 specified) or clears the filter (if no argument or "undef" is 231 specified) or clears the filter (if no argument or "undef" is
209 provided). 232 provided).
263 protocol and you need to know where the first CBOR string ends amd 286 protocol and you need to know where the first CBOR string ends amd
264 the next one starts. 287 the next one starts.
265 288
266 CBOR::XS->new->decode_prefix ("......") 289 CBOR::XS->new->decode_prefix ("......")
267 => ("...", 3) 290 => ("...", 3)
291
292 INCREMENTAL PARSING
293 In some cases, there is the need for incremental parsing of JSON texts.
294 While this module always has to keep both CBOR text and resulting Perl
295 data structure in memory at one time, it does allow you to parse a CBOR
296 stream incrementally, using a similar to using "decode_prefix" to see if
297 a full CBOR object is available, but is much more efficient.
298
299 It basically works by parsing as much of a CBOR string as possible - if
300 the CBOR data is not complete yet, the pasrer will remember where it
301 was, to be able to restart when more data has been accumulated. Once
302 enough data is available to either decode a complete CBOR value or raise
303 an error, a real decode will be attempted.
304
305 A typical use case would be a network protocol that consists of sending
306 and receiving CBOR-encoded messages. The solution that works with CBOR
307 and about anything else is by prepending a length to every CBOR value,
308 so the receiver knows how many octets to read. More compact (and
309 slightly slower) would be to just send CBOR values back-to-back, as
310 "CBOR::XS" knows where a CBOR value ends, and doesn't need an explicit
311 length.
312
313 The following methods help with this:
314
315 @decoded = $cbor->incr_parse ($buffer)
316 This method attempts to decode exactly one CBOR value from the
317 beginning of the given $buffer. The value is removed from the
318 $buffer on success. When $buffer doesn't contain a complete value
319 yet, it returns nothing. Finally, when the $buffer doesn't start
320 with something that could ever be a valid CBOR value, it raises an
321 exception, just as "decode" would. In the latter case the decoder
322 state is undefined and must be reset before being able to parse
323 further.
324
325 This method modifies the $buffer in place. When no CBOR value can be
326 decoded, the decoder stores the current string offset. On the next
327 call, continues decoding at the place where it stopped before. For
328 this to make sense, the $buffer must begin with the same octets as
329 on previous unsuccessful calls.
330
331 You can call this method in scalar context, in which case it either
332 returns a decoded value or "undef". This makes it impossible to
333 distinguish between CBOR null values (which decode to "undef") and
334 an unsuccessful decode, which is often acceptable.
335
336 @decoded = $cbor->incr_parse_multiple ($buffer)
337 Same as "incr_parse", but attempts to decode as many CBOR values as
338 possible in one go, instead of at most one. Calls to "incr_parse"
339 and "incr_parse_multiple" can be interleaved.
340
341 $cbor->incr_reset
342 Resets the incremental decoder. This throws away any saved state, so
343 that subsequent calls to "incr_parse" or "incr_parse_multiple" start
344 to parse a new CBOR value from the beginning of the $buffer again.
345
346 This method can be caled at any time, but it *must* be called if you
347 want to change your $buffer or there was a decoding error and you
348 want to reuse the $cbor object for future incremental parsings.
268 349
269MAPPING 350MAPPING
270 This section describes how CBOR::XS maps Perl values to CBOR values and 351 This section describes how CBOR::XS maps Perl values to CBOR values and
271 vice versa. These mappings are designed to "do the right thing" in most 352 vice versa. These mappings are designed to "do the right thing" in most
272 circumstances automatically, preserving round-tripping characteristics 353 circumstances automatically, preserving round-tripping characteristics
653 734
654 When any of these need to load additional modules that are not part of 735 When any of these need to load additional modules that are not part of
655 the perl core distribution (e.g. URI), it is (currently) up to the user 736 the perl core distribution (e.g. URI), it is (currently) up to the user
656 to provide these modules. The decoding usually fails with an exception 737 to provide these modules. The decoding usually fails with an exception
657 if the required module cannot be loaded. 738 if the required module cannot be loaded.
739
740 0, 1 (date/time string, seconds since the epoch)
741 These tags are decoded into Time::Piece objects. The corresponding
742 "Time::Piece::TO_CBOR" method always encodes into tag 1 values
743 currently.
744
745 The Time::Piece API is generally surprisingly bad, and fractional
746 seconds are only accidentally kept intact, so watch out. On the plus
747 side, the module comes with perl since 5.10, which has to count for
748 something.
658 749
659 2, 3 (positive/negative bignum) 750 2, 3 (positive/negative bignum)
660 These tags are decoded into Math::BigInt objects. The corresponding 751 These tags are decoded into Math::BigInt objects. The corresponding
661 "Math::BigInt::TO_CBOR" method encodes "small" bigints into normal 752 "Math::BigInt::TO_CBOR" method encodes "small" bigints into normal
662 CBOR integers, and others into positive/negative CBOR bignums. 753 CBOR integers, and others into positive/negative CBOR bignums.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines