module Bio.MMTF
  ( module Bio.MMTF.Type
  , decode
  , fetch
  ) where

import           Bio.MMTF.MessagePack ()
import           Bio.MMTF.Type

import           Data.ByteString.Lazy   (ByteString)
import           Data.MessagePack       (unpack)
import           Data.Monoid            ((<>))
import           Data.String            (IsString (..))
import           Control.Monad.IO.Class (MonadIO)
import           Network.HTTP.Simple    (httpLBS, getResponseBody)

-- | Decodes a 'ByteString' to 'MMTF'
--
decode :: Monad m => ByteString -> m MMTF
decode = unpack

-- | Fetches MMTF structure from RSCB
fetch :: MonadIO m => String -> m MMTF
fetch pdbid = do let url = fromString $ "https://mmtf.rcsb.org/v1.0/full/" <> pdbid
                 resp <- httpLBS url
                 decode (getResponseBody resp)