module Rattletrap.Type.Attribute.PartyLeader where import Prelude hiding (id) import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.RemoteId as RemoteId import qualified Rattletrap.Type.U8 as U8 import qualified Rattletrap.Type.Version as Version import qualified Rattletrap.Utility.Json as Json import Rattletrap.Utility.Monad data PartyLeader = PartyLeader { PartyLeader -> U8 systemId :: U8.U8 , PartyLeader -> Maybe (RemoteId, U8) id :: Maybe (RemoteId.RemoteId, U8.U8) } deriving (PartyLeader -> PartyLeader -> Bool (PartyLeader -> PartyLeader -> Bool) -> (PartyLeader -> PartyLeader -> Bool) -> Eq PartyLeader forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: PartyLeader -> PartyLeader -> Bool $c/= :: PartyLeader -> PartyLeader -> Bool == :: PartyLeader -> PartyLeader -> Bool $c== :: PartyLeader -> PartyLeader -> Bool Eq, Int -> PartyLeader -> ShowS [PartyLeader] -> ShowS PartyLeader -> String (Int -> PartyLeader -> ShowS) -> (PartyLeader -> String) -> ([PartyLeader] -> ShowS) -> Show PartyLeader forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [PartyLeader] -> ShowS $cshowList :: [PartyLeader] -> ShowS show :: PartyLeader -> String $cshow :: PartyLeader -> String showsPrec :: Int -> PartyLeader -> ShowS $cshowsPrec :: Int -> PartyLeader -> ShowS Show) instance Json.FromJSON PartyLeader where parseJSON :: Value -> Parser PartyLeader parseJSON = String -> (Object -> Parser PartyLeader) -> Value -> Parser PartyLeader forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "PartyLeader" ((Object -> Parser PartyLeader) -> Value -> Parser PartyLeader) -> (Object -> Parser PartyLeader) -> Value -> Parser PartyLeader forall a b. (a -> b) -> a -> b $ \Object object -> do U8 systemId <- Object -> String -> Parser U8 forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "system_id" Maybe (RemoteId, U8) id <- Object -> String -> Parser (Maybe (RemoteId, U8)) forall value. FromJSON value => Object -> String -> Parser (Maybe value) Json.optional Object object String "id" PartyLeader -> Parser PartyLeader forall (f :: * -> *) a. Applicative f => a -> f a pure PartyLeader :: U8 -> Maybe (RemoteId, U8) -> PartyLeader PartyLeader { U8 systemId :: U8 systemId :: U8 systemId, Maybe (RemoteId, U8) id :: Maybe (RemoteId, U8) id :: Maybe (RemoteId, U8) id } instance Json.ToJSON PartyLeader where toJSON :: PartyLeader -> Value toJSON PartyLeader x = [Pair] -> Value Json.object [String -> U8 -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "system_id" (U8 -> Pair) -> U8 -> Pair forall a b. (a -> b) -> a -> b $ PartyLeader -> U8 systemId PartyLeader x, String -> Maybe (RemoteId, U8) -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "id" (Maybe (RemoteId, U8) -> Pair) -> Maybe (RemoteId, U8) -> Pair forall a b. (a -> b) -> a -> b $ PartyLeader -> Maybe (RemoteId, U8) id PartyLeader x] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-party-leader" (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 "system_id" (Value -> Pair) -> Value -> Pair forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U8.schema, Bool True) , ( String -> Value -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "id" (Value -> Pair) -> Value -> Pair forall a b. (a -> b) -> a -> b $ [Value] -> Value Schema.oneOf [ [Value] -> Value Schema.tuple [Schema -> Value Schema.ref Schema RemoteId.schema, Schema -> Value Schema.ref Schema U8.schema] , Schema -> Value Schema.ref Schema Schema.null ] , Bool False ) ] bitPut :: PartyLeader -> BitPut.BitPut bitPut :: PartyLeader -> BitPut bitPut PartyLeader x = U8 -> BitPut U8.bitPut (PartyLeader -> U8 systemId PartyLeader x) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> ((RemoteId, U8) -> BitPut) -> Maybe (RemoteId, U8) -> BitPut forall (t :: * -> *) m a. (Foldable t, Monoid m) => (a -> m) -> t a -> m foldMap (\(RemoteId y, U8 z) -> RemoteId -> BitPut RemoteId.bitPut RemoteId y BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U8 -> BitPut U8.bitPut U8 z) (PartyLeader -> Maybe (RemoteId, U8) Rattletrap.Type.Attribute.PartyLeader.id PartyLeader x) bitGet :: Version.Version -> BitGet.BitGet PartyLeader bitGet :: Version -> BitGet PartyLeader bitGet Version version = do U8 systemId_ <- BitGet U8 U8.bitGet U8 -> Maybe (RemoteId, U8) -> PartyLeader PartyLeader U8 systemId_ (Maybe (RemoteId, U8) -> PartyLeader) -> BitGet (Maybe (RemoteId, U8)) -> BitGet PartyLeader forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Bool -> BitGet (RemoteId, U8) -> BitGet (Maybe (RemoteId, U8)) forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a) whenMaybe (U8 systemId_ U8 -> U8 -> Bool forall a. Eq a => a -> a -> Bool /= Word8 -> U8 U8.fromWord8 Word8 0) ((,) (RemoteId -> U8 -> (RemoteId, U8)) -> BitGet RemoteId -> BitGet (U8 -> (RemoteId, U8)) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Version -> U8 -> BitGet RemoteId RemoteId.bitGet Version version U8 systemId_ BitGet (U8 -> (RemoteId, U8)) -> BitGet U8 -> BitGet (RemoteId, U8) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> BitGet U8 U8.bitGet)