NAME
Mango::BSON - BSON
SYNOPSIS
use Mango::BSON ':bson';
my $bson = bson_encode {
foo => 'bar',
baz => 0.42,
unordered => {one => [1, 2, 3], two => bson_time},
ordered => bson_doc(one => qr/test/i, two => bson_true)
};
my $doc = bson_decode $bson;
DESCRIPTION
Mango::BSON is a minimalistic implementation of http://bsonspec.org.
In addition to a bunch of custom BSON data types it supports normal Perl data types like Scalar
, Regexp
, undef
, Array
reference, Hash
reference and will try to call the TO_JSON
method on blessed references, or stringify them if it doesn't exist. Scalar
references will be used to generate booleans, based on if their values are true or false.
FUNCTIONS
Mango::BSON implements the following functions.
bson_bin
my $bin = bson_bin $bytes;
Create new BSON element of the binary type with Mango::BSON::Binary, defaults to the generic
binary subtype.
# Function
bson_bin($bytes)->type('function');
# MD5
bson_bin($bytes)->type('md5');
# UUID
bson_bin($bytes)->type('uuid');
# User defined
bson_bin($bytes)->type('user_defined');
bson_code
my $code = bson_code 'function () {}';
Create new BSON element of the code type with Mango::BSON::Code.
# With scope
bson_code('function () {}')->scope({foo => 'bar'});
bson_dbref
my $dbref = bson_dbref('test', $oid);
Create a new database reference.
bson_decode
my $doc = bson_decode $bson;
Decode BSON into Perl data structures.
bson_doc
my $doc = bson_doc;
my $doc = bson_doc foo => 'bar', baz => 0.42, yada => {yada => [1, 2, 3]};
Create new BSON document with Mango::BSON::Document, which can also be used as a generic ordered hash.
# Order is preserved
my $hash = bson_doc one => 1, two => 2, three => 3;
$hash->{four} = 4;
delete $hash->{two};
say for keys %$hash;
bson_encode
my $bson = bson_encode $doc;
my $bson = bson_encode {};
Encode Perl data structures into BSON.
bson_false
my $false = bson_false;
Create new BSON element of the boolean type false.
bson_length
my $len = bson_length $bson;
Check BSON length prefix.
bson_max
my $max_key = bson_max;
Create new BSON element of the max key type.
bson_min
my $min_key = bson_min;
Create new BSON element of the min key type.
bson_oid
my $oid = bson_oid;
my $oid = bson_oid '1a2b3c4e5f60718293a4b5c6';
Create new BSON element of the object id type with Mango::BSON::ObjectID, defaults to generating a new unique object id.
# Generate object id with specific epoch time
my $oid = bson_oid->from_epoch(1359840145);
bson_time
my $now = bson_time;
my $time = bson_time time * 1000;
Create new BSON element of the UTC datetime type with Mango::BSON::Time, defaults to milliseconds since the UNIX epoch.
bson_true
my $true = bson_true;
Create new BSON element of the boolean type true.
bson_ts
my $timestamp = bson_ts 23, 24;
Create new BSON element of the timestamp type with Mango::BSON::Timestamp.
decode_int32
my $int32 = decode_int32 $bytes;
Decode 32bit integer.
decode_int64
my $int64 = decode_int64 $bytes;
Decode 64bit integer.
encode_cstring
my $bytes = encode_cstring $cstring;
Encode cstring.
encode_int32
my $bytes = encode_int32 $int32;
Encode 32bit integer.
encode_int64
my $bytes = encode_int64 $int64;
Encode 64bit integer.