module Codec.GlTF.Root where

import Codec.GlTF.Prelude

import Codec.GlTF.Asset (Asset)
import Codec.GlTF.Accessor (Accessor)
import Codec.GlTF.Animation (Animation)
import Codec.GlTF.Buffer (Buffer)
import Codec.GlTF.BufferView (BufferView)
import Codec.GlTF.Camera (Camera)
import Codec.GlTF.Image (Image)
import Codec.GlTF.Material (Material)
import Codec.GlTF.Mesh (Mesh)
import Codec.GlTF.Node (Node)
import Codec.GlTF.Sampler (Sampler)
import Codec.GlTF.Scene (Scene)
import Codec.GlTF.Skin (Skin)
import Codec.GlTF.Texture (Texture)

-- | The root object for a glTF asset.
data GlTF = GlTF
  { GlTF -> Asset
asset              :: Asset
  , GlTF -> Maybe (Vector Text)
extensionsUsed     :: Maybe (Vector Text)
  , GlTF -> Maybe (Vector Text)
extensionsRequired :: Maybe (Vector Text)
  , GlTF -> Maybe (Vector Accessor)
accessors          :: Maybe (Vector Accessor)
  , GlTF -> Maybe (Vector Animation)
animations         :: Maybe (Vector Animation)
  , GlTF -> Maybe (Vector Buffer)
buffers            :: Maybe (Vector Buffer)
  , GlTF -> Maybe (Vector BufferView)
bufferViews        :: Maybe (Vector BufferView)
  , GlTF -> Maybe (Vector Camera)
cameras            :: Maybe (Vector Camera)
  , GlTF -> Maybe (Vector Image)
images             :: Maybe (Vector Image)
  , GlTF -> Maybe (Vector Material)
materials          :: Maybe (Vector Material)
  , GlTF -> Maybe (Vector Mesh)
meshes             :: Maybe (Vector Mesh)
  , GlTF -> Maybe (Vector Node)
nodes              :: Maybe (Vector Node)
  , GlTF -> Maybe (Vector Sampler)
samplers           :: Maybe (Vector Sampler)
  , GlTF -> Maybe (Vector Scene)
scenes             :: Maybe (Vector Scene)
  , GlTF -> Maybe (Vector Skin)
skins              :: Maybe (Vector Skin)
  , GlTF -> Maybe (Vector Texture)
textures           :: Maybe (Vector Texture)
  , GlTF -> Maybe Object
extensions         :: Maybe Object
  , GlTF -> Maybe Value
extras             :: Maybe Value
  } deriving (GlTF -> GlTF -> Bool
(GlTF -> GlTF -> Bool) -> (GlTF -> GlTF -> Bool) -> Eq GlTF
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GlTF -> GlTF -> Bool
$c/= :: GlTF -> GlTF -> Bool
== :: GlTF -> GlTF -> Bool
$c== :: GlTF -> GlTF -> Bool
Eq, Int -> GlTF -> ShowS
[GlTF] -> ShowS
GlTF -> String
(Int -> GlTF -> ShowS)
-> (GlTF -> String) -> ([GlTF] -> ShowS) -> Show GlTF
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GlTF] -> ShowS
$cshowList :: [GlTF] -> ShowS
show :: GlTF -> String
$cshow :: GlTF -> String
showsPrec :: Int -> GlTF -> ShowS
$cshowsPrec :: Int -> GlTF -> ShowS
Show, (forall x. GlTF -> Rep GlTF x)
-> (forall x. Rep GlTF x -> GlTF) -> Generic GlTF
forall x. Rep GlTF x -> GlTF
forall x. GlTF -> Rep GlTF x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GlTF x -> GlTF
$cfrom :: forall x. GlTF -> Rep GlTF x
Generic)

instance FromJSON GlTF
instance ToJSON GlTF