module Rattletrap.Type.Property.Array where import qualified Rattletrap.ByteGet as ByteGet import qualified Rattletrap.BytePut as BytePut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.Dictionary as Dictionary import qualified Rattletrap.Type.List as List import qualified Rattletrap.Utility.Json as Json newtype Array a = Array (List.List (Dictionary.Dictionary a)) deriving (Array a -> Array a -> Bool forall a. Eq a => Array a -> Array a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Array a -> Array a -> Bool $c/= :: forall a. Eq a => Array a -> Array a -> Bool == :: Array a -> Array a -> Bool $c== :: forall a. Eq a => Array a -> Array a -> Bool Eq, Int -> Array a -> ShowS forall a. Show a => Int -> Array a -> ShowS forall a. Show a => [Array a] -> ShowS forall a. Show a => Array a -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Array a] -> ShowS $cshowList :: forall a. Show a => [Array a] -> ShowS show :: Array a -> String $cshow :: forall a. Show a => Array a -> String showsPrec :: Int -> Array a -> ShowS $cshowsPrec :: forall a. Show a => Int -> Array a -> ShowS Show) fromList :: List.List (Dictionary.Dictionary a) -> Array a fromList :: forall a. List (Dictionary a) -> Array a fromList = forall a. List (Dictionary a) -> Array a Array toList :: Array a -> List.List (Dictionary.Dictionary a) toList :: forall a. Array a -> List (Dictionary a) toList (Array List (Dictionary a) x) = List (Dictionary a) x instance (Json.FromJSON a) => Json.FromJSON (Array a) where parseJSON :: Value -> Parser (Array a) parseJSON = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a. List (Dictionary a) -> Array a fromList forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. FromJSON a => Value -> Parser a Json.parseJSON instance (Json.ToJSON a) => Json.ToJSON (Array a) where toJSON :: Array a -> Value toJSON = forall a. ToJSON a => a -> Value Json.toJSON forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Array a -> List (Dictionary a) toList schema :: Schema.Schema -> Schema.Schema schema :: Schema -> Schema schema Schema s = String -> Value -> Schema Schema.named String "property-array" forall b c a. (b -> c) -> (a -> b) -> a -> c . Schema -> Value Schema.json forall b c a. (b -> c) -> (a -> b) -> a -> c . Schema -> Schema List.schema forall a b. (a -> b) -> a -> b $ Schema -> Schema Dictionary.schema Schema s bytePut :: (a -> BytePut.BytePut) -> Array a -> BytePut.BytePut bytePut :: forall a. (a -> BytePut) -> Array a -> BytePut bytePut a -> BytePut f = forall a. (a -> BytePut) -> List a -> BytePut List.bytePut (forall a. (a -> BytePut) -> Dictionary a -> BytePut Dictionary.bytePut a -> BytePut f) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Array a -> List (Dictionary a) toList byteGet :: ByteGet.ByteGet a -> ByteGet.ByteGet (Array a) byteGet :: forall a. ByteGet a -> ByteGet (Array a) byteGet = forall a. String -> ByteGet a -> ByteGet a ByteGet.label String "Array" forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a. List (Dictionary a) -> Array a fromList forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. ByteGet a -> ByteGet (List a) List.byteGet forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. ByteGet a -> ByteGet (Dictionary a) Dictionary.byteGet