emongo / src / emongo_bson.erl

%% Copyright (c) 2010 Sean Russell
%% Permission to use, copy, or modify this file is hereby granted to everybody.
%% Do what thou wilt.
%%
%% This uses the same API as the original emongo_bson, but replaces the broken
%% emongo bson encoder with Tony Hannan's bson-erlang encoder.
%% https://github.com/TonyGen/bson-erlang
-module(emongo_bson).
-export([encode/1, decode/1]).
-compile(export_all).

%% Encode a *single* Document
-spec encode([tuple()]) -> binary().
encode([]) ->
	<<5,0,0,0,0>>;

encode(Document) ->
	bson_binary:put_document(bson:document(Document)).


%% Decode *multiple* documents
-spec decode( BsonEncodedDocs::binary() ) -> [ [tuple()] ].
decode(Bin) ->
	decode(Bin, []).
	
decode(<<>>, Acc) ->
	lists:reverse(Acc);
	
decode(Bin, Acc) ->
	{Doc, Rest} = bson_binary:get_document(Bin),
	Document = bson:fields(Doc),
	decode(Rest, [Document|Acc]).
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.