module Rattletrap.Type.Attribute.MusicStinger where import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.U32 as U32 import qualified Rattletrap.Type.U8 as U8 import qualified Rattletrap.Utility.Json as Json data MusicStinger = MusicStinger { MusicStinger -> Bool flag :: Bool, MusicStinger -> U32 cue :: U32.U32, MusicStinger -> U8 trigger :: U8.U8 } deriving (MusicStinger -> MusicStinger -> Bool (MusicStinger -> MusicStinger -> Bool) -> (MusicStinger -> MusicStinger -> Bool) -> Eq MusicStinger forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: MusicStinger -> MusicStinger -> Bool == :: MusicStinger -> MusicStinger -> Bool $c/= :: MusicStinger -> MusicStinger -> Bool /= :: MusicStinger -> MusicStinger -> Bool Eq, Int -> MusicStinger -> ShowS [MusicStinger] -> ShowS MusicStinger -> String (Int -> MusicStinger -> ShowS) -> (MusicStinger -> String) -> ([MusicStinger] -> ShowS) -> Show MusicStinger forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> MusicStinger -> ShowS showsPrec :: Int -> MusicStinger -> ShowS $cshow :: MusicStinger -> String show :: MusicStinger -> String $cshowList :: [MusicStinger] -> ShowS showList :: [MusicStinger] -> ShowS Show) instance Json.FromJSON MusicStinger where parseJSON :: Value -> Parser MusicStinger parseJSON = String -> (Object -> Parser MusicStinger) -> Value -> Parser MusicStinger forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "MusicStinger" ((Object -> Parser MusicStinger) -> Value -> Parser MusicStinger) -> (Object -> Parser MusicStinger) -> Value -> Parser MusicStinger forall a b. (a -> b) -> a -> b $ \Object object -> do flag <- Object -> String -> Parser Bool forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "flag" cue <- Json.required object "cue" trigger <- Json.required object "trigger" pure MusicStinger {flag, cue, trigger} instance Json.ToJSON MusicStinger where toJSON :: MusicStinger -> Value toJSON MusicStinger x = [(Key, Value)] -> Value Json.object [ String -> Bool -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "flag" (Bool -> (Key, Value)) -> Bool -> (Key, Value) forall a b. (a -> b) -> a -> b $ MusicStinger -> Bool flag MusicStinger x, String -> U32 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "cue" (U32 -> (Key, Value)) -> U32 -> (Key, Value) forall a b. (a -> b) -> a -> b $ MusicStinger -> U32 cue MusicStinger x, String -> U8 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "trigger" (U8 -> (Key, Value)) -> U8 -> (Key, Value) forall a b. (a -> b) -> a -> b $ MusicStinger -> U8 trigger MusicStinger x ] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-music-stinger" (Value -> Schema) -> Value -> Schema forall a b. (a -> b) -> a -> b $ [((Key, Value), Bool)] -> Value Schema.object [ (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "flag" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.boolean, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "cue" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U32.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "trigger" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U8.schema, Bool True) ] bitPut :: MusicStinger -> BitPut.BitPut bitPut :: MusicStinger -> BitPut bitPut MusicStinger musicStingerAttribute = Bool -> BitPut BitPut.bool (MusicStinger -> Bool flag MusicStinger musicStingerAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U32 -> BitPut U32.bitPut (MusicStinger -> U32 cue MusicStinger musicStingerAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U8 -> BitPut U8.bitPut (MusicStinger -> U8 trigger MusicStinger musicStingerAttribute) bitGet :: BitGet.BitGet MusicStinger bitGet :: BitGet MusicStinger bitGet = String -> BitGet MusicStinger -> BitGet MusicStinger forall a. String -> BitGet a -> BitGet a BitGet.label String "MusicStinger" (BitGet MusicStinger -> BitGet MusicStinger) -> BitGet MusicStinger -> BitGet MusicStinger forall a b. (a -> b) -> a -> b $ do flag <- String -> BitGet Bool -> BitGet Bool forall a. String -> BitGet a -> BitGet a BitGet.label String "flag" BitGet Bool BitGet.bool cue <- BitGet.label "cue" U32.bitGet trigger <- BitGet.label "trigger" U8.bitGet pure MusicStinger {flag, cue, trigger}