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 /= :: MusicStinger -> MusicStinger -> Bool $c/= :: MusicStinger -> MusicStinger -> Bool == :: MusicStinger -> MusicStinger -> Bool $c== :: 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 showList :: [MusicStinger] -> ShowS $cshowList :: [MusicStinger] -> ShowS show :: MusicStinger -> String $cshow :: MusicStinger -> String showsPrec :: Int -> MusicStinger -> ShowS $cshowsPrec :: Int -> 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 Bool flag <- Object -> String -> Parser Bool forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "flag" U32 cue <- Object -> String -> Parser U32 forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "cue" U8 trigger <- Object -> String -> Parser U8 forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "trigger" MusicStinger -> Parser MusicStinger forall (f :: * -> *) a. Applicative f => a -> f a pure MusicStinger :: Bool -> U32 -> U8 -> MusicStinger MusicStinger { Bool flag :: Bool flag :: Bool flag, U32 cue :: U32 cue :: U32 cue, U8 trigger :: U8 trigger :: U8 trigger } instance Json.ToJSON MusicStinger where toJSON :: MusicStinger -> Value toJSON MusicStinger x = [Pair] -> Value Json.object [ String -> Bool -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "flag" (Bool -> Pair) -> Bool -> Pair forall a b. (a -> b) -> a -> b $ MusicStinger -> Bool flag MusicStinger x , String -> U32 -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "cue" (U32 -> Pair) -> U32 -> Pair forall a b. (a -> b) -> a -> b $ MusicStinger -> U32 cue MusicStinger x , String -> U8 -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "trigger" (U8 -> Pair) -> U8 -> Pair 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 $ [(Pair, Bool)] -> Value Schema.object [ (String -> Value -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "flag" (Value -> Pair) -> Value -> Pair forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.boolean, Bool True) , (String -> Value -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "cue" (Value -> Pair) -> Value -> Pair forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U32.schema, Bool True) , (String -> Value -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "trigger" (Value -> Pair) -> Value -> Pair 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 = Bool -> U32 -> U8 -> MusicStinger MusicStinger (Bool -> U32 -> U8 -> MusicStinger) -> BitGet Bool -> BitGet (U32 -> U8 -> MusicStinger) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> BitGet Bool BitGet.bool BitGet (U32 -> U8 -> MusicStinger) -> BitGet U32 -> BitGet (U8 -> MusicStinger) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> BitGet U32 U32.bitGet BitGet (U8 -> MusicStinger) -> BitGet U8 -> BitGet MusicStinger forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> BitGet U8 U8.bitGet