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.74 by root, Mon Nov 30 18:30:29 2020 UTC vs.
Revision 1.77 by root, Fri Dec 4 02:57:14 2020 UTC

64 64
65package CBOR::XS; 65package CBOR::XS;
66 66
67use common::sense; 67use common::sense;
68 68
69our $VERSION = 1.81; 69our $VERSION = 1.82;
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;
729 729
730=item CBOR::XS::as_bytes $value 730=item CBOR::XS::as_bytes $value
731 731
732Forces the value to be encoded as a (binary) string value. 732Forces the value to be encoded as a (binary) string value.
733 733
734Example: encode a perl string as binary even though C<text_strings> is in
735effect.
736
737 CBOR::XS->new->text_strings->encode ([4, "text", CBOR::XS::bytes "bytevalue"]);
738
739=item CBOR::XS::as_bool $value
740
741Converts a Perl boolean (which can be any kind of scalar) into a CBOR
742boolean. Strictly the same, but shorter to write, than:
743
744 $value ? Types::Serialiser::true : Types::Serialiser::false
745
734=item CBOR::XS::as_float16 $value 746=item CBOR::XS::as_float16 $value
735 747
736Forces half-float (IEEE 754 binary16) encoding of the given value. 748Forces half-float (IEEE 754 binary16) encoding of the given value.
737 749
738=item CBOR::XS::as_float32 $value 750=item CBOR::XS::as_float32 $value
741 753
742=item CBOR::XS::as_float64 $value 754=item CBOR::XS::as_float64 $value
743 755
744Forces double-float (IEEE 754 binary64) encoding of the given value. 756Forces double-float (IEEE 754 binary64) encoding of the given value.
745 757
746=item, CBOR::XS::as_cbor $cbor_text 758=item CBOR::XS::as_cbor $cbor_text
747 759
748Bot a type cast per-se, this type cast forces the argument to eb encoded 760Not a type cast per-se, this type cast forces the argument to eb encoded
749as-is. This can be used to embed pre-encoded CBOR data. 761as-is. This can be used to embed pre-encoded CBOR data.
750 762
751Note that no checking on the validity of the C<$cbor_text> is done - it's 763Note that no checking on the validity of the C<$cbor_text> is done - it's
752the callers responsibility to correctly encode values. 764the callers responsibility to correctly encode values.
753 765
766=item CBOR::XS::as_map [key => value...]
767
768Treat the array reference as key value pairs and output a CBOR map. This
769allows you to generate CBOR maps with arbitrary key types (or, if you
770don't care about semantics, duplicate keys or prairs in a custom order),
771which is otherwise hard to do with Perl.
772
773The single argument must be an array reference with an even number of
774elements.
775
776Example: encode a CBOR map with a string and an integer as keys.
777
778 encode_cbor CBOR::XS::as_map [string => "value", 5 => "value"]
779
754=back 780=back
755
756Example: encode a perl string as binary even though C<text_strings> is in
757effect.
758
759 CBOR::XS->new->text_strings->encode ([4, "text", CBOR::XS::bytes "bytevalue"]);
760 781
761=cut 782=cut
762 783
763sub CBOR::XS::as_cbor ($) { bless [$_[0], 0, undef], CBOR::XS::Tagged:: } 784sub CBOR::XS::as_cbor ($) { bless [$_[0], 0, undef], CBOR::XS::Tagged:: }
764sub CBOR::XS::as_int ($) { bless [$_[0], 1, undef], CBOR::XS::Tagged:: } 785sub CBOR::XS::as_int ($) { bless [$_[0], 1, undef], CBOR::XS::Tagged:: }
765sub CBOR::XS::as_bytes ($) { bless [$_[0], 2, undef], CBOR::XS::Tagged:: } 786sub CBOR::XS::as_bytes ($) { bless [$_[0], 2, undef], CBOR::XS::Tagged:: }
766sub CBOR::XS::as_text ($) { bless [$_[0], 3, undef], CBOR::XS::Tagged:: } 787sub CBOR::XS::as_text ($) { bless [$_[0], 3, undef], CBOR::XS::Tagged:: }
767sub CBOR::XS::as_float16 ($) { bless [$_[0], 4, undef], CBOR::XS::Tagged:: } 788sub CBOR::XS::as_float16 ($) { bless [$_[0], 4, undef], CBOR::XS::Tagged:: }
768sub CBOR::XS::as_float32 ($) { bless [$_[0], 5, undef], CBOR::XS::Tagged:: } 789sub CBOR::XS::as_float32 ($) { bless [$_[0], 5, undef], CBOR::XS::Tagged:: }
769sub CBOR::XS::as_float64 ($) { bless [$_[0], 6, undef], CBOR::XS::Tagged:: } 790sub CBOR::XS::as_float64 ($) { bless [$_[0], 6, undef], CBOR::XS::Tagged:: }
791
792sub CBOR::XS::as_bool ($) { $_[0] ? $Types::Serialiser::true : $Types::Serialiser::false }
793
794sub CBOR::XS::as_map ($) {
795 ARRAY:: eq ref $_[0]
796 and $#{ $_[0] } & 1
797 or do { require Carp; Carp::croak ("CBOR::XS::as_map only acepts array references with an even number of elements, found ") };
798
799 bless [$_[0], 7, undef], CBOR::XS::Tagged::
800}
770 801
771=head2 OBJECT SERIALISATION 802=head2 OBJECT SERIALISATION
772 803
773This module implements both a CBOR-specific and the generic 804This module implements both a CBOR-specific and the generic
774L<Types::Serialier> object serialisation protocol. The following 805L<Types::Serialier> object serialisation protocol. The following

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines