Data.Bson
Description
A BSON document is a JSON-like object with a standard binary encoding defined at bsonspec.org. This implements version 1.0 of that spec.
Use the GHC language extension OverloadedStrings to automatically convert String literals to UString (UTF8)
- module Data.UString
- type Document = [Field]
- look :: Monad m => Label -> Document -> m Value
- lookup :: (Val v, Monad m) => Label -> Document -> m v
- valueAt :: Label -> Document -> Value
- at :: forall v. Val v => Label -> Document -> v
- include :: [Label] -> Document -> Document
- exclude :: [Label] -> Document -> Document
- merge :: Document -> Document -> Document
- data Field = := {}
- (=:) :: Val v => Label -> v -> Field
- (=?) :: Val a => Label -> Maybe a -> Document
- type Label = UString
- data Value
- class (Typeable a, Show a, Eq a) => Val a where
- fval :: (forall a. Val a => a -> b) -> Value -> b
- cast :: forall m a. (Val a, Monad m) => Value -> m a
- typed :: Val a => Value -> a
- typeOfVal :: Value -> TypeRep
- newtype Binary = Binary ByteString
- newtype Function = Function ByteString
- newtype UUID = UUID ByteString
- newtype MD5 = MD5 ByteString
- newtype UserDefined = UserDefined ByteString
- data Regex = Regex UString UString
- data Javascript = Javascript Document UString
- newtype Symbol = Symbol UString
- newtype MongoStamp = MongoStamp Int64
- data MinMaxKey
- data ObjectId = Oid Word32 Word64
- timestamp :: ObjectId -> UTCTime
- genObjectId :: IO ObjectId
UTF-8 String
module Data.UString
Document
look :: Monad m => Label -> Document -> m ValueSource
Value of field in document, or fail (Nothing) if field not found
lookup :: (Val v, Monad m) => Label -> Document -> m vSource
Lookup value of field in document and cast to expected type. Fail (Nothing) if field not found or value not of expected type.
at :: forall v. Val v => Label -> Document -> vSource
Typed value of field in document. Error if missing or wrong type.
merge :: Document -> Document -> DocumentSource
Merge documents with preference given to first one when both have the same label. I.e. for every (k := v) in first argument, if k exists in second argument then replace its value with v, otherwise add (k := v) to second argument.
Field
A BSON field is a named value, where the name (label) is a string and the value is a BSON Value
(=?) :: Val a => Label -> Maybe a -> DocumentSource
If Just value then return one field document, otherwise return empty document
Value
A BSON value is one of the following types of values
class (Typeable a, Show a, Eq a) => Val a whereSource
Haskell types of this class correspond to BSON value types
Instances
Val Bool | |
Val Double | |
Val Float | |
Val Int | |
Val Int32 | |
Val Int64 | |
Val Integer | |
Val String | |
Val POSIXTime | |
Val UTCTime | |
Val UString | |
Val ObjectId | |
Val MinMaxKey | |
Val MongoStamp | |
Val Symbol | |
Val Javascript | |
Val Regex | |
Val UserDefined | |
Val MD5 | |
Val UUID | |
Val Function | |
Val Binary | |
Val Document | |
Val a => Val [a] | |
Val [Value] | |
Val a => Val (Maybe a) | |
Val (Maybe Value) |
cast :: forall m a. (Val a, Monad m) => Value -> m aSource
Convert Value to expected type, or fail (Nothing) if not of that type
Special Bson value types
Constructors
Binary ByteString |
Constructors
Function ByteString |
Constructors
UUID ByteString |
newtype UserDefined Source
Constructors
UserDefined ByteString |
The first string is the regex pattern, the second is the regex options string. Options are identified by characters, which must be listed in alphabetical order. Valid options are *i* for case insensitive matching, *m* for multiline matching, *x* for verbose mode, *l* to make \w, \W, etc. locale dependent, *s* for dotall mode ("." matches everything), and *u* to make \w, \W, etc. match unicode.
data Javascript Source
Javascript code with possibly empty environment mapping variables to values that the code may reference
Constructors
Javascript Document UString |
Instances
ObjectId
A BSON ObjectID is a 12-byte value consisting of a 4-byte timestamp (seconds since epoch), a 3-byte machine id, a 2-byte process id, and a 3-byte counter. Note that the timestamp and counter fields must be stored big endian unlike the rest of BSON. This is because they are compared byte-by-byte and we want to ensure a mostly increasing order.
genObjectId :: IO ObjectIdSource
Create a fresh ObjectId