module Rattletrap.Type.ClassMapping where import qualified Rattletrap.ByteGet as ByteGet import qualified Rattletrap.BytePut as BytePut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.Str as Str import qualified Rattletrap.Type.U32 as U32 import qualified Rattletrap.Utility.Json as Json data ClassMapping = ClassMapping { ClassMapping -> Str name :: Str.Str, ClassMapping -> U32 streamId :: U32.U32 } deriving (ClassMapping -> ClassMapping -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ClassMapping -> ClassMapping -> Bool $c/= :: ClassMapping -> ClassMapping -> Bool == :: ClassMapping -> ClassMapping -> Bool $c== :: ClassMapping -> ClassMapping -> Bool Eq, Int -> ClassMapping -> ShowS [ClassMapping] -> ShowS ClassMapping -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ClassMapping] -> ShowS $cshowList :: [ClassMapping] -> ShowS show :: ClassMapping -> String $cshow :: ClassMapping -> String showsPrec :: Int -> ClassMapping -> ShowS $cshowsPrec :: Int -> ClassMapping -> ShowS Show) instance Json.FromJSON ClassMapping where parseJSON :: Value -> Parser ClassMapping parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "ClassMapping" forall a b. (a -> b) -> a -> b $ \Object object -> do Str name <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "name" U32 streamId <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "stream_id" forall (f :: * -> *) a. Applicative f => a -> f a pure ClassMapping {Str name :: Str name :: Str name, U32 streamId :: U32 streamId :: U32 streamId} instance Json.ToJSON ClassMapping where toJSON :: ClassMapping -> Value toJSON ClassMapping x = [(Key, Value)] -> Value Json.object [forall value p. (ToJSON value, KeyValue p) => String -> value -> p Json.pair String "name" forall a b. (a -> b) -> a -> b $ ClassMapping -> Str name ClassMapping x, forall value p. (ToJSON value, KeyValue p) => String -> value -> p Json.pair String "stream_id" forall a b. (a -> b) -> a -> b $ ClassMapping -> U32 streamId ClassMapping x] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "classMapping" forall a b. (a -> b) -> a -> b $ [((Key, Value), Bool)] -> Value Schema.object [ (forall value p. (ToJSON value, KeyValue p) => String -> value -> p Json.pair String "name" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Str.schema, Bool True), (forall value p. (ToJSON value, KeyValue p) => String -> value -> p Json.pair String "stream_id" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U32.schema, Bool True) ] bytePut :: ClassMapping -> BytePut.BytePut bytePut :: ClassMapping -> BytePut bytePut ClassMapping x = Str -> BytePut Str.bytePut (ClassMapping -> Str name ClassMapping x) forall a. Semigroup a => a -> a -> a <> U32 -> BytePut U32.bytePut (ClassMapping -> U32 streamId ClassMapping x) byteGet :: ByteGet.ByteGet ClassMapping byteGet :: ByteGet ClassMapping byteGet = forall a. String -> ByteGet a -> ByteGet a ByteGet.label String "ClassMapping" forall a b. (a -> b) -> a -> b $ do Str name <- forall a. String -> ByteGet a -> ByteGet a ByteGet.label String "name" ByteGet Str Str.byteGet U32 streamId <- forall a. String -> ByteGet a -> ByteGet a ByteGet.label String "streamId" ByteGet U32 U32.byteGet forall (f :: * -> *) a. Applicative f => a -> f a pure ClassMapping {Str name :: Str name :: Str name, U32 streamId :: U32 streamId :: U32 streamId}