Skip to content

jeromegn/bson.cr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BSON

BSON implemented in Crystal according to the spec.

Installation

Add this line to your application's shard.yml:

dependencies:
  bson:
    github: jeromegn/bson.cr

Usage

require "bson"

io = File.open(File.expand_path("examples/sample.bson")) # A pretty representative BSON document
BSON.decode(io) # => Returns a Hash instance

bson, writer = IO.pipe
"a string".to_bson(writer) # => encodes the string to BSON and writes to the IO

puts String.from_bson(bson).inspect # => "a string"

doc = Hash{
  "name" => "hello",
  "int" => 32
}

puts doc # => { "name" => "hello", "int" => 32 }

bson, writer = IO.pipe
doc.to_bson(writer) # => Encodes the whole document to BSON and writes to the IO

puts BSON.decode(bson) # => { "name" => "hello", "int" => 32 }

Supported types

All types specified in the BSON spec.

Relevant basic types of Crystal have been extended to add #to_bson(io : IO) and .from_bson(io : IO) for simplicity.

A BSON::Document is just an alias for Hash(String, BSON::Type)

TODOs

  • More tests

Caveats

  • Only supported Regex options are the ones also supported by Crystal: i and m basically.

Contributing

  1. Fork it ( https://github.com/jeromegn/bson.cr/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • jeromegn Jerome Gravel-Niquet - creator, maintainer

About

BSON implementation written in Crystal

Resources

License

Stars

Watchers

Forks

Packages

No packages published