{-# OPTIONS_GHC -fno-warn-orphans #-}

module Bio.MMTF.MessagePack where

import           Bio.MMTF.Decode
import           Bio.MMTF.Decode.MessagePack
import           Bio.MMTF.Type

import           Data.MessagePack            (MessagePack (..))

instance MessagePack MMTF where
  toObject :: MMTF -> Object
toObject = forall a. HasCallStack => a
undefined -- TODO: add MMTF encoding
  fromObject :: forall (m :: * -> *).
(Applicative m, Monad m, MonadFail m) =>
Object -> m MMTF
fromObject Object
obj = do Map Text Object
mp <- forall (m :: * -> *). MonadFail m => Object -> m (Map Text Object)
transformObjectMap Object
obj
                      FormatData
f <- forall (m :: * -> *).
MonadFail m =>
Map Text Object -> m FormatData
formatData Map Text Object
mp
                      StructureData
s <- forall (m :: * -> *).
MonadFail m =>
Map Text Object -> m StructureData
structureData Map Text Object
mp
                      ModelData
m <- forall (m :: * -> *). MonadFail m => Map Text Object -> m ModelData
modelData Map Text Object
mp
                      ChainData
c <- forall (m :: * -> *). MonadFail m => Map Text Object -> m ChainData
chainData Map Text Object
mp
                      GroupData
g <- forall (m :: * -> *). MonadFail m => Map Text Object -> m GroupData
groupData Map Text Object
mp
                      AtomData
a <- forall (m :: * -> *). MonadFail m => Map Text Object -> m AtomData
atomData Map Text Object
mp
                      forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ FormatData
-> StructureData
-> ModelData
-> ChainData
-> GroupData
-> AtomData
-> MMTF
MMTF FormatData
f StructureData
s ModelData
m ChainData
c GroupData
g AtomData
a