-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | BSON documents are JSON-like objects with a standard binary encoding
--
-- BSON (short for Binary JSON) is a binary-encoded serialization of
-- JSON-like documents.
--
-- This implements version 1.0 of the BSON spec, which is defined at
-- http://bsonspec.org.
@package bson
@version 0.0.2
-- | UTF-8 String
module Data.UString
-- | UTF-8 String
type UString = CompactString
u :: String -> UString
instance Typeable UTF8
instance Typeable1 CompactString
instance Read CompactString
-- | 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.Bson
-- | UTF-8 String
type UString = CompactString
-- | A BSON document is a sequence of Fields
type Document = [Field]
-- | Value of field in document, or fail (Nothing) if field not found
look :: (Monad m) => Label -> Document -> m Value
-- | Lookup value of field in document and cast to expected type. Fail
-- (Nothing) if field not found or value not of expected type.
lookup :: (Val v, Monad m) => Label -> Document -> m v
-- | Value of field in document. Error if missing.
valueAt :: Label -> Document -> Value
-- | Typed value of field in document. Error if missing or wrong type.
at :: (Val v) => Label -> Document -> v
-- | Only include fields of document in label list
include :: [Label] -> Document -> Document
-- | Exclude fields from document in label list
exclude :: [Label] -> Document -> Document
-- | 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.
merge :: Document -> Document -> Document
-- | A BSON field is a named value, where the name (label) is a string and
-- the value is a BSON Value
data Field
(:=) :: Label -> Value -> Field
label :: Field -> Label
value :: Field -> Value
-- | Field with given label and typed value
(=:) :: (Val v) => Label -> v -> Field
-- | If Just value then return one field document, otherwise return empty
-- document
(=?) :: (Val a) => Label -> Maybe a -> Document
-- | The name of a BSON field
type Label = UString
-- | A BSON value is one of the following types of values
data Value
Float :: Double -> Value
String :: UString -> Value
Doc :: Document -> Value
Array :: [Value] -> Value
Bin :: Binary -> Value
Fun :: Function -> Value
Uuid :: UUID -> Value
Md5 :: MD5 -> Value
UserDef :: UserDefined -> Value
ObjId :: ObjectId -> Value
Bool :: Bool -> Value
UTC :: UTCTime -> Value
Null :: Value
RegEx :: Regex -> Value
JavaScr :: Javascript -> Value
Sym :: Symbol -> Value
Int32 :: Int32 -> Value
Int64 :: Int64 -> Value
Stamp :: MongoStamp -> Value
MinMax :: MinMaxKey -> Value
-- | Haskell types of this class correspond to BSON value types
class (Typeable a, Show a, Eq a) => Val a
val :: (Val a) => a -> Value
cast' :: (Val a) => Value -> Maybe a
-- | Apply generic function to typed value
fval :: (forall a. (Val a) => a -> b) -> Value -> b
-- | Convert Value to expected type, or fail (Nothing) if not of that type
cast :: (Val a, Monad m) => Value -> m a
-- | Convert Value to expected type. Error if not that type.
typed :: (Val a) => Value -> a
newtype Binary
Binary :: ByteString -> Binary
newtype Function
Function :: ByteString -> Function
newtype UUID
UUID :: ByteString -> UUID
newtype MD5
MD5 :: ByteString -> MD5
newtype UserDefined
UserDefined :: ByteString -> UserDefined
data Regex
Regex :: UString -> UString -> Regex
-- | Javascript code with possibly empty environment mapping variables to
-- values that the code may reference
data Javascript
Javascript :: Document -> UString -> Javascript
newtype Symbol
Symbol :: UString -> Symbol
newtype MongoStamp
MongoStamp :: Int64 -> MongoStamp
data MinMaxKey
MinKey :: MinMaxKey
MaxKey :: MinMaxKey
-- | 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.
data ObjectId
Oid :: Word32 -> Word64 -> ObjectId
-- | Time when objectId was created
timestamp :: ObjectId -> UTCTime
-- | Create a fresh ObjectId
genObjectId :: IO ObjectId
instance [incoherent] Typeable ObjectId
instance [incoherent] Typeable MinMaxKey
instance [incoherent] Typeable MongoStamp
instance [incoherent] Typeable Symbol
instance [incoherent] Typeable Javascript
instance [incoherent] Typeable Regex
instance [incoherent] Typeable UserDefined
instance [incoherent] Typeable MD5
instance [incoherent] Typeable UUID
instance [incoherent] Typeable Function
instance [incoherent] Typeable Binary
instance [incoherent] Typeable Value
instance [incoherent] Typeable Field
instance [incoherent] Eq ObjectId
instance [incoherent] Ord ObjectId
instance [incoherent] Show MinMaxKey
instance [incoherent] Read MinMaxKey
instance [incoherent] Eq MinMaxKey
instance [incoherent] Show MongoStamp
instance [incoherent] Read MongoStamp
instance [incoherent] Eq MongoStamp
instance [incoherent] Show Symbol
instance [incoherent] Read Symbol
instance [incoherent] Eq Symbol
instance [incoherent] Show Javascript
instance [incoherent] Eq Javascript
instance [incoherent] Show Regex
instance [incoherent] Read Regex
instance [incoherent] Eq Regex
instance [incoherent] Show UserDefined
instance [incoherent] Read UserDefined
instance [incoherent] Eq UserDefined
instance [incoherent] Show MD5
instance [incoherent] Read MD5
instance [incoherent] Eq MD5
instance [incoherent] Show UUID
instance [incoherent] Read UUID
instance [incoherent] Eq UUID
instance [incoherent] Show Function
instance [incoherent] Read Function
instance [incoherent] Eq Function
instance [incoherent] Show Binary
instance [incoherent] Read Binary
instance [incoherent] Eq Binary
instance [incoherent] Eq Value
instance [incoherent] Eq Field
instance [incoherent] Show ObjectId
instance [incoherent] Val MinMaxKey
instance [incoherent] Val MongoStamp
instance [incoherent] Val Integer
instance [incoherent] Val Int
instance [incoherent] Val Int64
instance [incoherent] Val Int32
instance [incoherent] Val Symbol
instance [incoherent] Val Javascript
instance [incoherent] Val Regex
instance [incoherent] Val ()
instance [incoherent] Val POSIXTime
instance [incoherent] Val UTCTime
instance [incoherent] Val Bool
instance [incoherent] Val ObjectId
instance [incoherent] Val UserDefined
instance [incoherent] Val MD5
instance [incoherent] Val UUID
instance [incoherent] Val Function
instance [incoherent] Val Binary
instance [incoherent] (Val a) => Val [a]
instance [incoherent] Val [Value]
instance [incoherent] Val Document
instance [incoherent] Val String
instance [incoherent] Val UString
instance [incoherent] Val Float
instance [incoherent] Val Double
instance [incoherent] Show Value
instance [incoherent] Show Field
-- | Standard binary encoding of BSON documents, version 1.0. See
-- bsonspec.org
module Data.Bson.Binary
putDocument :: Document -> Put
getDocument :: Get Document
putDouble :: Double -> Put
getDouble :: Get Double
putInt32 :: Int32 -> Put
getInt32 :: Get Int32
putInt64 :: Int64 -> Put
getInt64 :: Get Int64
putCString :: UString -> Put
getCString :: Get UString