module Rattletrap.Type.Attribute.LoadoutsOnline where

import qualified Rattletrap.BitGet as BitGet
import qualified Rattletrap.BitPut as BitPut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.Attribute.LoadoutOnline as LoadoutOnline
import qualified Rattletrap.Type.Str as Str
import qualified Rattletrap.Type.U32 as U32
import qualified Rattletrap.Type.Version as Version
import qualified Rattletrap.Utility.Json as Json

import qualified Data.Map as Map

data LoadoutsOnline = LoadoutsOnline
  { LoadoutsOnline -> LoadoutOnline
blue :: LoadoutOnline.LoadoutOnline
  , LoadoutsOnline -> LoadoutOnline
orange :: LoadoutOnline.LoadoutOnline
  , LoadoutsOnline -> Bool
unknown1 :: Bool
  , LoadoutsOnline -> Bool
unknown2 :: Bool
  }
  deriving (LoadoutsOnline -> LoadoutsOnline -> Bool
(LoadoutsOnline -> LoadoutsOnline -> Bool)
-> (LoadoutsOnline -> LoadoutsOnline -> Bool) -> Eq LoadoutsOnline
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LoadoutsOnline -> LoadoutsOnline -> Bool
$c/= :: LoadoutsOnline -> LoadoutsOnline -> Bool
== :: LoadoutsOnline -> LoadoutsOnline -> Bool
$c== :: LoadoutsOnline -> LoadoutsOnline -> Bool
Eq, Int -> LoadoutsOnline -> ShowS
[LoadoutsOnline] -> ShowS
LoadoutsOnline -> String
(Int -> LoadoutsOnline -> ShowS)
-> (LoadoutsOnline -> String)
-> ([LoadoutsOnline] -> ShowS)
-> Show LoadoutsOnline
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LoadoutsOnline] -> ShowS
$cshowList :: [LoadoutsOnline] -> ShowS
show :: LoadoutsOnline -> String
$cshow :: LoadoutsOnline -> String
showsPrec :: Int -> LoadoutsOnline -> ShowS
$cshowsPrec :: Int -> LoadoutsOnline -> ShowS
Show)

instance Json.FromJSON LoadoutsOnline where
  parseJSON :: Value -> Parser LoadoutsOnline
parseJSON = String
-> (Object -> Parser LoadoutsOnline)
-> Value
-> Parser LoadoutsOnline
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Json.withObject String
"LoadoutsOnline" ((Object -> Parser LoadoutsOnline)
 -> Value -> Parser LoadoutsOnline)
-> (Object -> Parser LoadoutsOnline)
-> Value
-> Parser LoadoutsOnline
forall a b. (a -> b) -> a -> b
$ \Object
object -> do
    LoadoutOnline
blue <- Object -> String -> Parser LoadoutOnline
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"blue"
    LoadoutOnline
orange <- Object -> String -> Parser LoadoutOnline
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"orange"
    Bool
unknown1 <- Object -> String -> Parser Bool
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown1"
    Bool
unknown2 <- Object -> String -> Parser Bool
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown2"
    LoadoutsOnline -> Parser LoadoutsOnline
forall (f :: * -> *) a. Applicative f => a -> f a
pure LoadoutsOnline :: LoadoutOnline -> LoadoutOnline -> Bool -> Bool -> LoadoutsOnline
LoadoutsOnline { LoadoutOnline
blue :: LoadoutOnline
blue :: LoadoutOnline
blue, LoadoutOnline
orange :: LoadoutOnline
orange :: LoadoutOnline
orange, Bool
unknown1 :: Bool
unknown1 :: Bool
unknown1, Bool
unknown2 :: Bool
unknown2 :: Bool
unknown2 }

instance Json.ToJSON LoadoutsOnline where
  toJSON :: LoadoutsOnline -> Value
toJSON LoadoutsOnline
x = [Pair] -> Value
Json.object
    [ String -> LoadoutOnline -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"blue" (LoadoutOnline -> Pair) -> LoadoutOnline -> Pair
forall a b. (a -> b) -> a -> b
$ LoadoutsOnline -> LoadoutOnline
blue LoadoutsOnline
x
    , String -> LoadoutOnline -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"orange" (LoadoutOnline -> Pair) -> LoadoutOnline -> Pair
forall a b. (a -> b) -> a -> b
$ LoadoutsOnline -> LoadoutOnline
orange LoadoutsOnline
x
    , String -> Bool -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" (Bool -> Pair) -> Bool -> Pair
forall a b. (a -> b) -> a -> b
$ LoadoutsOnline -> Bool
unknown1 LoadoutsOnline
x
    , String -> Bool -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" (Bool -> Pair) -> Bool -> Pair
forall a b. (a -> b) -> a -> b
$ LoadoutsOnline -> Bool
unknown2 LoadoutsOnline
x
    ]

schema :: Schema.Schema
schema :: Schema
schema = String -> Value -> Schema
Schema.named String
"attribute-loadouts-online" (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
"blue" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
LoadoutOnline.schema, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"orange" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
LoadoutOnline.schema, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" (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
"unknown2" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True)
  ]

bitPut :: LoadoutsOnline -> BitPut.BitPut
bitPut :: LoadoutsOnline -> BitPut
bitPut LoadoutsOnline
loadoutsOnlineAttribute =
  LoadoutOnline -> BitPut
LoadoutOnline.bitPut (LoadoutsOnline -> LoadoutOnline
blue LoadoutsOnline
loadoutsOnlineAttribute)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> LoadoutOnline -> BitPut
LoadoutOnline.bitPut (LoadoutsOnline -> LoadoutOnline
orange LoadoutsOnline
loadoutsOnlineAttribute)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (LoadoutsOnline -> Bool
unknown1 LoadoutsOnline
loadoutsOnlineAttribute)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (LoadoutsOnline -> Bool
unknown2 LoadoutsOnline
loadoutsOnlineAttribute)

bitGet
  :: Version.Version -> Map.Map U32.U32 Str.Str -> BitGet.BitGet LoadoutsOnline
bitGet :: Version -> Map U32 Str -> BitGet LoadoutsOnline
bitGet Version
version Map U32 Str
objectMap = do
  LoadoutOnline
blue <- Version -> Map U32 Str -> BitGet LoadoutOnline
LoadoutOnline.bitGet Version
version Map U32 Str
objectMap
  LoadoutOnline
orange <- Version -> Map U32 Str -> BitGet LoadoutOnline
LoadoutOnline.bitGet Version
version Map U32 Str
objectMap
  Bool
unknown1 <- BitGet Bool
BitGet.bool
  Bool
unknown2 <- BitGet Bool
BitGet.bool
  LoadoutsOnline -> BitGet LoadoutsOnline
forall (f :: * -> *) a. Applicative f => a -> f a
pure LoadoutsOnline :: LoadoutOnline -> LoadoutOnline -> Bool -> Bool -> LoadoutsOnline
LoadoutsOnline { LoadoutOnline
blue :: LoadoutOnline
blue :: LoadoutOnline
blue, LoadoutOnline
orange :: LoadoutOnline
orange :: LoadoutOnline
orange, Bool
unknown1 :: Bool
unknown1 :: Bool
unknown1, Bool
unknown2 :: Bool
unknown2 :: Bool
unknown2 }