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

Comparing CBOR-XS/XS.pm (file contents):
Revision 1.47 by root, Mon Feb 8 04:26:01 2016 UTC vs.
Revision 1.51 by root, Sun Apr 24 19:16:15 2016 UTC

64 64
65package CBOR::XS; 65package CBOR::XS;
66 66
67use common::sense; 67use common::sense;
68 68
69our $VERSION = 1.4; 69our $VERSION = 1.41;
70our @ISA = qw(Exporter); 70our @ISA = qw(Exporter);
71 71
72our @EXPORT = qw(encode_cbor decode_cbor); 72our @EXPORT = qw(encode_cbor decode_cbor);
73 73
74use Exporter; 74use Exporter;
261The concept of "valid UTF-8" used is perl's concept, which is a superset 261The concept of "valid UTF-8" used is perl's concept, which is a superset
262of the official UTF-8. 262of the official UTF-8.
263 263
264If C<$enable> is false (the default), then C<decode> will blindly accept 264If C<$enable> is false (the default), then C<decode> will blindly accept
265UTF-8 data, marking them as valid UTF-8 in the resulting data structure 265UTF-8 data, marking them as valid UTF-8 in the resulting data structure
266regardless of whether thats true or not. 266regardless of whether that's true or not.
267 267
268Perl isn't too happy about corrupted UTF-8 in strings, but should 268Perl isn't too happy about corrupted UTF-8 in strings, but should
269generally not crash or do similarly evil things. Extensions might be not 269generally not crash or do similarly evil things. Extensions might be not
270so forgiving, so it's recommended to turn on this setting if you receive 270so forgiving, so it's recommended to turn on this setting if you receive
271untrusted CBOR. 271untrusted CBOR.
481 481
482=item hash references 482=item hash references
483 483
484Perl hash references become CBOR maps. As there is no inherent ordering in 484Perl hash references become CBOR maps. As there is no inherent ordering in
485hash keys (or CBOR maps), they will usually be encoded in a pseudo-random 485hash keys (or CBOR maps), they will usually be encoded in a pseudo-random
486order. This order can be different each time a hahs is encoded. 486order. This order can be different each time a hash is encoded.
487 487
488Currently, tied hashes will use the indefinite-length format, while normal 488Currently, tied hashes will use the indefinite-length format, while normal
489hashes will use the fixed-length format. 489hashes will use the fixed-length format.
490 490
491=item array references 491=item array references
804additional tags (such as base64url). 804additional tags (such as base64url).
805 805
806=head2 ENFORCED TAGS 806=head2 ENFORCED TAGS
807 807
808These tags are always handled when decoding, and their handling cannot be 808These tags are always handled when decoding, and their handling cannot be
809overriden by the user. 809overridden by the user.
810 810
811=over 4 811=over 4
812 812
813=item 26 (perl-object, L<http://cbor.schmorp.de/perl-object>) 813=item 26 (perl-object, L<http://cbor.schmorp.de/perl-object>)
814 814
842encoded, however, when C<pack_strings> is enabled. 842encoded, however, when C<pack_strings> is enabled.
843 843
844=item 22098 (indirection, L<http://cbor.schmorp.de/indirection>) 844=item 22098 (indirection, L<http://cbor.schmorp.de/indirection>)
845 845
846This tag is automatically generated when a reference are encountered (with 846This tag is automatically generated when a reference are encountered (with
847the exception of hash and array refernces). It is converted to a reference 847the exception of hash and array references). It is converted to a reference
848when decoding. 848when decoding.
849 849
850=item 55799 (self-describe CBOR, RFC 7049) 850=item 55799 (self-describe CBOR, RFC 7049)
851 851
852This value is not generated on encoding (unless explicitly requested by 852This value is not generated on encoding (unless explicitly requested by
855=back 855=back
856 856
857=head2 NON-ENFORCED TAGS 857=head2 NON-ENFORCED TAGS
858 858
859These tags have default filters provided when decoding. Their handling can 859These tags have default filters provided when decoding. Their handling can
860be overriden by changing the C<%CBOR::XS::FILTER> entry for the tag, or by 860be overridden by changing the C<%CBOR::XS::FILTER> entry for the tag, or by
861providing a custom C<filter> callback when decoding. 861providing a custom C<filter> callback when decoding.
862 862
863When they result in decoding into a specific Perl class, the module 863When they result in decoding into a specific Perl class, the module
864usually provides a corresponding C<TO_CBOR> method as well. 864usually provides a corresponding C<TO_CBOR> method as well.
865 865
907C<URI::TO_CBOR> method again results in a CBOR URI value. 907C<URI::TO_CBOR> method again results in a CBOR URI value.
908 908
909=back 909=back
910 910
911=cut 911=cut
912
913our %FILTER = (
914 # 0 # rfc4287 datetime, utf-8
915 # 1 # unix timestamp, any
916
917 2 => sub { # pos bigint
918 require Math::BigInt;
919 Math::BigInt->new ("0x" . unpack "H*", pop)
920 },
921
922 3 => sub { # neg bigint
923 require Math::BigInt;
924 -Math::BigInt->new ("0x" . unpack "H*", pop)
925 },
926
927 4 => sub { # decimal fraction, array
928 require Math::BigFloat;
929 Math::BigFloat->new ($_[1][1] . "E" . $_[1][0])
930 },
931
932 5 => sub { # bigfloat, array
933 require Math::BigFloat;
934 scalar Math::BigFloat->new ($_[1][1])->blsft ($_[1][0], 2)
935 },
936
937 21 => sub { pop }, # expected conversion to base64url encoding
938 22 => sub { pop }, # expected conversion to base64 encoding
939 23 => sub { pop }, # expected conversion to base16 encoding
940
941 # 24 # embedded cbor, byte string
942
943 32 => sub {
944 require URI;
945 URI->new (pop)
946 },
947
948 # 33 # base64url rfc4648, utf-8
949 # 34 # base64 rfc46484, utf-8
950 # 35 # regex pcre/ecma262, utf-8
951 # 36 # mime message rfc2045, utf-8
952);
953
954 912
955=head1 CBOR and JSON 913=head1 CBOR and JSON
956 914
957CBOR is supposed to implement a superset of the JSON data model, and is, 915CBOR is supposed to implement a superset of the JSON data model, and is,
958with some coercion, able to represent all JSON texts (something that other 916with some coercion, able to represent all JSON texts (something that other
1096 Math::BigFloat->new ($_[1][1] . "E" . $_[1][0]) 1054 Math::BigFloat->new ($_[1][1] . "E" . $_[1][0])
1097 }, 1055 },
1098 1056
1099 5 => sub { # bigfloat, array 1057 5 => sub { # bigfloat, array
1100 require Math::BigFloat; 1058 require Math::BigFloat;
1101 scalar Math::BigFloat->new ($_[1][1])->blsft ($_[1][0], 2) 1059 scalar Math::BigFloat->new ($_[1][1]) * Math::BigFloat->new (2)->bpow ($_[1][0])
1102 }, 1060 },
1103 1061
1104 21 => sub { pop }, # expected conversion to base64url encoding 1062 21 => sub { pop }, # expected conversion to base64url encoding
1105 22 => sub { pop }, # expected conversion to base64 encoding 1063 22 => sub { pop }, # expected conversion to base64 encoding
1106 23 => sub { pop }, # expected conversion to base16 encoding 1064 23 => sub { pop }, # expected conversion to base16 encoding

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines