rattletrap-13.0.1: src/lib/Rattletrap/Type/Cache.hs
module Rattletrap.Type.Cache where
import qualified Rattletrap.ByteGet as ByteGet
import qualified Rattletrap.BytePut as BytePut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.AttributeMapping as AttributeMapping
import qualified Rattletrap.Type.List as RList
import qualified Rattletrap.Type.U32 as U32
import qualified Rattletrap.Utility.Json as Json
data Cache = Cache
{ classId :: U32.U32,
parentCacheId :: U32.U32,
cacheId :: U32.U32,
attributeMappings :: RList.List AttributeMapping.AttributeMapping
}
deriving (Eq, Show)
instance Json.FromJSON Cache where
parseJSON = Json.withObject "Cache" $ \object -> do
classId <- Json.required object "class_id"
parentCacheId <- Json.required object "parent_cache_id"
cacheId <- Json.required object "cache_id"
attributeMappings <- Json.required object "attribute_mappings"
pure Cache {classId, parentCacheId, cacheId, attributeMappings}
instance Json.ToJSON Cache where
toJSON x =
Json.object
[ Json.pair "class_id" $ classId x,
Json.pair "parent_cache_id" $ parentCacheId x,
Json.pair "cache_id" $ cacheId x,
Json.pair "attribute_mappings" $ attributeMappings x
]
schema :: Schema.Schema
schema =
Schema.named "cache" $
Schema.object
[ (Json.pair "class_id" $ Schema.ref U32.schema, True),
(Json.pair "parent_cache_id" $ Schema.ref U32.schema, True),
(Json.pair "cache_id" $ Schema.ref U32.schema, True),
( Json.pair "attribute_mappings" . Schema.json $
RList.schema
AttributeMapping.schema,
True
)
]
bytePut :: Cache -> BytePut.BytePut
bytePut x =
U32.bytePut (classId x)
<> U32.bytePut (parentCacheId x)
<> U32.bytePut (cacheId x)
<> RList.bytePut AttributeMapping.bytePut (attributeMappings x)
byteGet :: ByteGet.ByteGet Cache
byteGet = ByteGet.label "Cache" $ do
classId <- ByteGet.label "classId" U32.byteGet
parentCacheId <- ByteGet.label "parentCacheId" U32.byteGet
cacheId <- ByteGet.label "cacheId" U32.byteGet
attributeMappings <-
ByteGet.label "attributeMappings" $
RList.byteGet AttributeMapping.byteGet
pure Cache {classId, parentCacheId, cacheId, attributeMappings}