{-# 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 = MMTF -> Object
forall a. HasCallStack => a
undefined -- TODO: add MMTF encoding
  fromObject :: Object -> m MMTF
fromObject Object
obj = do Map Text Object
mp <- Object -> m (Map Text Object)
forall (m :: * -> *). MonadFail m => Object -> m (Map Text Object)
transformObjectMap Object
obj
                      FormatData
f <- Map Text Object -> m FormatData
forall (m :: * -> *).
MonadFail m =>
Map Text Object -> m FormatData
formatData Map Text Object
mp
                      StructureData
s <- Map Text Object -> m StructureData
forall (m :: * -> *).
MonadFail m =>
Map Text Object -> m StructureData
structureData Map Text Object
mp
                      ModelData
m <- Map Text Object -> m ModelData
forall (m :: * -> *). MonadFail m => Map Text Object -> m ModelData
modelData Map Text Object
mp
                      ChainData
c <- Map Text Object -> m ChainData
forall (m :: * -> *). MonadFail m => Map Text Object -> m ChainData
chainData Map Text Object
mp
                      GroupData
g <- Map Text Object -> m GroupData
forall (m :: * -> *). MonadFail m => Map Text Object -> m GroupData
groupData Map Text Object
mp
                      AtomData
a <- Map Text Object -> m AtomData
forall (m :: * -> *). MonadFail m => Map Text Object -> m AtomData
atomData Map Text Object
mp
                      MMTF -> m MMTF
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MMTF -> m MMTF) -> MMTF -> m MMTF
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