module Rattletrap.Type.RemoteId.Steam where

import qualified Rattletrap.BitGet as BitGet
import qualified Rattletrap.BitPut as BitPut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.U64 as U64
import qualified Rattletrap.Utility.Json as Json

newtype Steam
  = Steam U64.U64
  deriving (Steam -> Steam -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Steam -> Steam -> Bool
$c/= :: Steam -> Steam -> Bool
== :: Steam -> Steam -> Bool
$c== :: Steam -> Steam -> Bool
Eq, Int -> Steam -> ShowS
[Steam] -> ShowS
Steam -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Steam] -> ShowS
$cshowList :: [Steam] -> ShowS
show :: Steam -> String
$cshow :: Steam -> String
showsPrec :: Int -> Steam -> ShowS
$cshowsPrec :: Int -> Steam -> ShowS
Show)

instance Json.FromJSON Steam where
  parseJSON :: Value -> Parser Steam
parseJSON = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap U64 -> Steam
fromU64 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. FromJSON a => Value -> Parser a
Json.parseJSON

instance Json.ToJSON Steam where
  toJSON :: Steam -> Value
toJSON = forall a. ToJSON a => a -> Value
Json.toJSON forall b c a. (b -> c) -> (a -> b) -> a -> c
. Steam -> U64
toU64

fromU64 :: U64.U64 -> Steam
fromU64 :: U64 -> Steam
fromU64 = U64 -> Steam
Steam

toU64 :: Steam -> U64.U64
toU64 :: Steam -> U64
toU64 (Steam U64
x) = U64
x

schema :: Schema.Schema
schema :: Schema
schema = Schema
U64.schema

bitPut :: Steam -> BitPut.BitPut
bitPut :: Steam -> BitPut
bitPut = U64 -> BitPut
U64.bitPut forall b c a. (b -> c) -> (a -> b) -> a -> c
. Steam -> U64
toU64

bitGet :: BitGet.BitGet Steam
bitGet :: BitGet Steam
bitGet = forall a. String -> BitGet a -> BitGet a
BitGet.label String
"Steam" forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap U64 -> Steam
fromU64 BitGet U64
U64.bitGet