some initial Convertibles for converting from Bson
This commit is contained in:
parent
67bf1245bb
commit
f60d984677
1 changed files with 97 additions and 2 deletions
|
@ -30,7 +30,7 @@ module Database.MongoDB.BSON
|
||||||
toBsonDoc,
|
toBsonDoc,
|
||||||
BinarySubType(..),
|
BinarySubType(..),
|
||||||
|
|
||||||
toBson
|
fromBson, toBson
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
@ -38,7 +38,7 @@ import Data.Binary
|
||||||
import Data.Binary.Get
|
import Data.Binary.Get
|
||||||
import Data.Binary.IEEE754
|
import Data.Binary.IEEE754
|
||||||
import Data.Binary.Put
|
import Data.Binary.Put
|
||||||
import Data.ByteString.Char8
|
import Data.ByteString.Char8 as C8
|
||||||
import qualified Data.ByteString.Lazy as L
|
import qualified Data.ByteString.Lazy as L
|
||||||
import qualified Data.ByteString.Lazy.UTF8 as L8
|
import qualified Data.ByteString.Lazy.UTF8 as L8
|
||||||
import qualified Data.ByteString.UTF8 as S8
|
import qualified Data.ByteString.UTF8 as S8
|
||||||
|
@ -47,6 +47,7 @@ import Data.Int
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import qualified Data.List as List
|
import qualified Data.List as List
|
||||||
import Data.Time.Clock.POSIX
|
import Data.Time.Clock.POSIX
|
||||||
|
import Data.Typeable
|
||||||
import Database.MongoDB.Util
|
import Database.MongoDB.Util
|
||||||
|
|
||||||
data BsonValue
|
data BsonValue
|
||||||
|
@ -68,6 +69,9 @@ data BsonValue
|
||||||
| BsonMaxKey
|
| BsonMaxKey
|
||||||
deriving (Show, Eq, Ord)
|
deriving (Show, Eq, Ord)
|
||||||
|
|
||||||
|
instance Typeable BsonValue where
|
||||||
|
typeOf _ = mkTypeName "BsonValue"
|
||||||
|
|
||||||
newtype BsonDoc = BsonDoc {
|
newtype BsonDoc = BsonDoc {
|
||||||
fromBsonDoc :: Map.Map L8.ByteString BsonValue
|
fromBsonDoc :: Map.Map L8.ByteString BsonValue
|
||||||
}
|
}
|
||||||
|
@ -257,9 +261,16 @@ putOutterObj bytes = do
|
||||||
putDataType :: DataType -> Put
|
putDataType :: DataType -> Put
|
||||||
putDataType = putI8 . fromDataType
|
putDataType = putI8 . fromDataType
|
||||||
|
|
||||||
|
fromBson :: Convertible BsonValue a => BsonValue -> a
|
||||||
|
fromBson = convert
|
||||||
|
|
||||||
toBson :: Convertible a BsonValue => a -> BsonValue
|
toBson :: Convertible a BsonValue => a -> BsonValue
|
||||||
toBson = convert
|
toBson = convert
|
||||||
|
|
||||||
|
unsupportedError :: (Typeable a, Convertible BsonValue a) =>
|
||||||
|
BsonValue -> ConvertResult a
|
||||||
|
unsupportedError = convError "Unsupported conversion"
|
||||||
|
|
||||||
instance Convertible Double BsonValue where
|
instance Convertible Double BsonValue where
|
||||||
safeConvert = return . BsonDouble
|
safeConvert = return . BsonDouble
|
||||||
|
|
||||||
|
@ -331,3 +342,87 @@ instance Convertible Int32 BsonValue where
|
||||||
|
|
||||||
instance Convertible Int64 BsonValue where
|
instance Convertible Int64 BsonValue where
|
||||||
safeConvert i = return $ BsonInt64 i
|
safeConvert i = return $ BsonInt64 i
|
||||||
|
|
||||||
|
instance Convertible BsonValue Double where
|
||||||
|
safeConvert (BsonDouble d) = return d
|
||||||
|
safeConvert (BsonInt32 i) = safeConvert i
|
||||||
|
safeConvert (BsonInt64 i) = safeConvert i
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue Float where
|
||||||
|
safeConvert (BsonDouble d) = safeConvert d
|
||||||
|
safeConvert (BsonInt32 i) = safeConvert i
|
||||||
|
safeConvert (BsonInt64 i) = safeConvert i
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue String where
|
||||||
|
safeConvert (BsonString bs) = return $ L8.toString bs
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue L8.ByteString where
|
||||||
|
safeConvert (BsonString bs) = return bs
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue S8.ByteString where
|
||||||
|
safeConvert (BsonString bs) = return $ C8.concat $ L.toChunks bs
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [Double] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [Float] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [String] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [Bool] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [POSIXTime] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [Int32] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue [Int64] where
|
||||||
|
safeConvert (BsonArray a) = mapM safeConvert a
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue Bool where
|
||||||
|
safeConvert (BsonBool b) = return b
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue POSIXTime where
|
||||||
|
safeConvert (BsonDate t) = return t
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue Int where
|
||||||
|
safeConvert (BsonDouble d) = safeConvert d
|
||||||
|
safeConvert (BsonInt32 d) = safeConvert d
|
||||||
|
safeConvert (BsonInt64 d) = safeConvert d
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue Integer where
|
||||||
|
safeConvert (BsonDouble d) = safeConvert d
|
||||||
|
safeConvert (BsonInt32 d) = safeConvert d
|
||||||
|
safeConvert (BsonInt64 d) = safeConvert d
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue Int32 where
|
||||||
|
safeConvert (BsonDouble d) = safeConvert d
|
||||||
|
safeConvert (BsonInt32 d) = return d
|
||||||
|
safeConvert (BsonInt64 d) = safeConvert d
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
||||||
|
instance Convertible BsonValue Int64 where
|
||||||
|
safeConvert (BsonDouble d) = safeConvert d
|
||||||
|
safeConvert (BsonInt32 d) = safeConvert d
|
||||||
|
safeConvert (BsonInt64 d) = return d
|
||||||
|
safeConvert v = unsupportedError v
|
||||||
|
|
Loading…
Reference in a new issue