module Database.Drasil.Dump where

import Language.Drasil (UID)
import Database.Drasil.ChunkDB

import Data.Map.Strict (Map)
import qualified Data.Map.Strict as SM

type ChunkType = String

-- | A dumped representation of a 'ChunkDB', mapping chunk types ('String's) to
-- lists of 'UID's.
type DumpedChunkDB = Map ChunkType [UID]

dumpChunkDB :: ChunkDB -> DumpedChunkDB
dumpChunkDB :: ChunkDB -> DumpedChunkDB
dumpChunkDB ChunkDB
cdb = [(ChunkType, [UID])] -> DumpedChunkDB
forall k a. Ord k => [(k, a)] -> Map k a
SM.fromList ([(ChunkType, [UID])] -> DumpedChunkDB)
-> [(ChunkType, [UID])] -> DumpedChunkDB
forall a b. (a -> b) -> a -> b
$ (SomeTypeRep -> (ChunkType, [UID]))
-> [SomeTypeRep] -> [(ChunkType, [UID])]
forall a b. (a -> b) -> [a] -> [b]
map (\SomeTypeRep
ty -> (SomeTypeRep -> ChunkType
forall a. Show a => a -> ChunkType
show SomeTypeRep
ty, SomeTypeRep -> ChunkDB -> [UID]
findAll' SomeTypeRep
ty ChunkDB
cdb)) (ChunkDB -> [SomeTypeRep]
typesRegistered ChunkDB
cdb)