module Codec.GlTF.Buffer
  ( BufferIx(..)
  , Buffer(..)
  ) where

import Codec.GlTF.Prelude

import Codec.GlTF.URI (URI)

newtype BufferIx = BufferIx { BufferIx -> Int
unBufferIx :: Int }
  deriving (BufferIx -> BufferIx -> Bool
(BufferIx -> BufferIx -> Bool)
-> (BufferIx -> BufferIx -> Bool) -> Eq BufferIx
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BufferIx -> BufferIx -> Bool
$c/= :: BufferIx -> BufferIx -> Bool
== :: BufferIx -> BufferIx -> Bool
$c== :: BufferIx -> BufferIx -> Bool
Eq, Eq BufferIx
Eq BufferIx
-> (BufferIx -> BufferIx -> Ordering)
-> (BufferIx -> BufferIx -> Bool)
-> (BufferIx -> BufferIx -> Bool)
-> (BufferIx -> BufferIx -> Bool)
-> (BufferIx -> BufferIx -> Bool)
-> (BufferIx -> BufferIx -> BufferIx)
-> (BufferIx -> BufferIx -> BufferIx)
-> Ord BufferIx
BufferIx -> BufferIx -> Bool
BufferIx -> BufferIx -> Ordering
BufferIx -> BufferIx -> BufferIx
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: BufferIx -> BufferIx -> BufferIx
$cmin :: BufferIx -> BufferIx -> BufferIx
max :: BufferIx -> BufferIx -> BufferIx
$cmax :: BufferIx -> BufferIx -> BufferIx
>= :: BufferIx -> BufferIx -> Bool
$c>= :: BufferIx -> BufferIx -> Bool
> :: BufferIx -> BufferIx -> Bool
$c> :: BufferIx -> BufferIx -> Bool
<= :: BufferIx -> BufferIx -> Bool
$c<= :: BufferIx -> BufferIx -> Bool
< :: BufferIx -> BufferIx -> Bool
$c< :: BufferIx -> BufferIx -> Bool
compare :: BufferIx -> BufferIx -> Ordering
$ccompare :: BufferIx -> BufferIx -> Ordering
$cp1Ord :: Eq BufferIx
Ord, Int -> BufferIx -> ShowS
[BufferIx] -> ShowS
BufferIx -> String
(Int -> BufferIx -> ShowS)
-> (BufferIx -> String) -> ([BufferIx] -> ShowS) -> Show BufferIx
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BufferIx] -> ShowS
$cshowList :: [BufferIx] -> ShowS
show :: BufferIx -> String
$cshow :: BufferIx -> String
showsPrec :: Int -> BufferIx -> ShowS
$cshowsPrec :: Int -> BufferIx -> ShowS
Show, Value -> Parser [BufferIx]
Value -> Parser BufferIx
(Value -> Parser BufferIx)
-> (Value -> Parser [BufferIx]) -> FromJSON BufferIx
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [BufferIx]
$cparseJSONList :: Value -> Parser [BufferIx]
parseJSON :: Value -> Parser BufferIx
$cparseJSON :: Value -> Parser BufferIx
FromJSON, [BufferIx] -> Encoding
[BufferIx] -> Value
BufferIx -> Encoding
BufferIx -> Value
(BufferIx -> Value)
-> (BufferIx -> Encoding)
-> ([BufferIx] -> Value)
-> ([BufferIx] -> Encoding)
-> ToJSON BufferIx
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [BufferIx] -> Encoding
$ctoEncodingList :: [BufferIx] -> Encoding
toJSONList :: [BufferIx] -> Value
$ctoJSONList :: [BufferIx] -> Value
toEncoding :: BufferIx -> Encoding
$ctoEncoding :: BufferIx -> Encoding
toJSON :: BufferIx -> Value
$ctoJSON :: BufferIx -> Value
ToJSON, (forall x. BufferIx -> Rep BufferIx x)
-> (forall x. Rep BufferIx x -> BufferIx) -> Generic BufferIx
forall x. Rep BufferIx x -> BufferIx
forall x. BufferIx -> Rep BufferIx x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BufferIx x -> BufferIx
$cfrom :: forall x. BufferIx -> Rep BufferIx x
Generic)

-- | A buffer points to binary geometry, animation, or skins.
--
-- glTF Buffer referring to GLB-stored BIN chunk, must have @buffer.uri@
-- property undefined, and it must be the first element of buffers array;
-- byte length of BIN chunk could be up to 3 bytes bigger than JSON-defined
-- buffer.byteLength to satisfy GLB padding requirements.
data Buffer = Buffer
  { Buffer -> Int
byteLength :: Size
  , Buffer -> Maybe URI
uri        :: Maybe URI
  , Buffer -> Maybe Text
name       :: Maybe Text
  , Buffer -> Maybe Object
extensions :: Maybe Object
  , Buffer -> Maybe Value
extras     :: Maybe Value
  } deriving (Buffer -> Buffer -> Bool
(Buffer -> Buffer -> Bool)
-> (Buffer -> Buffer -> Bool) -> Eq Buffer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Buffer -> Buffer -> Bool
$c/= :: Buffer -> Buffer -> Bool
== :: Buffer -> Buffer -> Bool
$c== :: Buffer -> Buffer -> Bool
Eq, Int -> Buffer -> ShowS
[Buffer] -> ShowS
Buffer -> String
(Int -> Buffer -> ShowS)
-> (Buffer -> String) -> ([Buffer] -> ShowS) -> Show Buffer
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Buffer] -> ShowS
$cshowList :: [Buffer] -> ShowS
show :: Buffer -> String
$cshow :: Buffer -> String
showsPrec :: Int -> Buffer -> ShowS
$cshowsPrec :: Int -> Buffer -> ShowS
Show, (forall x. Buffer -> Rep Buffer x)
-> (forall x. Rep Buffer x -> Buffer) -> Generic Buffer
forall x. Rep Buffer x -> Buffer
forall x. Buffer -> Rep Buffer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Buffer x -> Buffer
$cfrom :: forall x. Buffer -> Rep Buffer x
Generic)

instance FromJSON Buffer
instance ToJSON Buffer