module Octane.Types.ObjectMap (ObjectMap(..)) where

import qualified Data.IntMap as IntMap
import Octane.Core
import Octane.Types.List
import Octane.Types.PCString

newtype ObjectMap = NewObjectMap
    { getObjectMap :: IntMap PCString
    } deriving (Show)

instance Binary ObjectMap where
    get = do
        NewList objects <- get
        objects & zip [0 ..] & IntMap.fromAscList & NewObjectMap & return

    put (NewObjectMap objects) = do
        objects & IntMap.elems & NewList & put