summaryrefslogtreecommitdiff
path: root/ddl/out/purescript/LambdaCube/Mesh.purs
blob: b91c0f66b77c7690fbdea58ee08880ebc49a6d9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
-- generated file, do not modify!
-- 2016-11-15T20:33:23.430512000000Z

module LambdaCube.Mesh where
import Prelude
import Data.Generic
import Data.Either (Either(..))
import Data.Maybe (Maybe(..))
import Data.StrMap (StrMap(..))
import Data.Map (Map(..))
import Data.List (List(..))
import LambdaCube.LinearBase

import Data.Argonaut.Encode.Combinators ((~>), (:=))
import Data.Argonaut.Decode.Combinators ((.?))
import Data.Argonaut.Core (jsonEmptyObject)
import Data.Argonaut.Printer (printJson)
import Data.Argonaut.Encode (class EncodeJson, encodeJson)
import Data.Argonaut.Decode (class DecodeJson, decodeJson)


data MeshAttribute
  = A_Float (Array Float)
  | A_V2F (Array V2F)
  | A_V3F (Array V3F)
  | A_V4F (Array V4F)
  | A_M22F (Array M22F)
  | A_M33F (Array M33F)
  | A_M44F (Array M44F)
  | A_Int (Array Int32)
  | A_Word (Array Word32)

data MeshPrimitive
  = P_Points
  | P_TriangleStrip
  | P_Triangles
  | P_TriangleStripI (Array Int32)
  | P_TrianglesI (Array Int32)

data Mesh
  = Mesh
  { mAttributes :: StrMap MeshAttribute
  , mPrimitive :: MeshPrimitive
  }



instance encodeJsonMeshAttribute :: EncodeJson MeshAttribute where
  encodeJson v = case v of
    A_Float arg0 -> "tag" := "A_Float" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_V2F arg0 -> "tag" := "A_V2F" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_V3F arg0 -> "tag" := "A_V3F" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_V4F arg0 -> "tag" := "A_V4F" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_M22F arg0 -> "tag" := "A_M22F" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_M33F arg0 -> "tag" := "A_M33F" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_M44F arg0 -> "tag" := "A_M44F" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_Int arg0 -> "tag" := "A_Int" ~> "arg0" := arg0 ~> jsonEmptyObject
    A_Word arg0 -> "tag" := "A_Word" ~> "arg0" := arg0 ~> jsonEmptyObject

instance decodeJsonMeshAttribute :: DecodeJson MeshAttribute where
  decodeJson json = do
    obj <- decodeJson json
    tag <- obj .? "tag"
    case tag of
      "A_Float" -> A_Float <$> obj .? "arg0"
      "A_V2F" -> A_V2F <$> obj .? "arg0"
      "A_V3F" -> A_V3F <$> obj .? "arg0"
      "A_V4F" -> A_V4F <$> obj .? "arg0"
      "A_M22F" -> A_M22F <$> obj .? "arg0"
      "A_M33F" -> A_M33F <$> obj .? "arg0"
      "A_M44F" -> A_M44F <$> obj .? "arg0"
      "A_Int" -> A_Int <$> obj .? "arg0"
      "A_Word" -> A_Word <$> obj .? "arg0"
      _ -> Left ("decodeJsonMeshAttribute - unknown tag: " <> tag)

instance encodeJsonMeshPrimitive :: EncodeJson MeshPrimitive where
  encodeJson v = case v of
    P_Points -> "tag" := "P_Points" ~> jsonEmptyObject
    P_TriangleStrip -> "tag" := "P_TriangleStrip" ~> jsonEmptyObject
    P_Triangles -> "tag" := "P_Triangles" ~> jsonEmptyObject
    P_TriangleStripI arg0 -> "tag" := "P_TriangleStripI" ~> "arg0" := arg0 ~> jsonEmptyObject
    P_TrianglesI arg0 -> "tag" := "P_TrianglesI" ~> "arg0" := arg0 ~> jsonEmptyObject

instance decodeJsonMeshPrimitive :: DecodeJson MeshPrimitive where
  decodeJson json = do
    obj <- decodeJson json
    tag <- obj .? "tag"
    case tag of
      "P_Points" -> pure P_Points
      "P_TriangleStrip" -> pure P_TriangleStrip
      "P_Triangles" -> pure P_Triangles
      "P_TriangleStripI" -> P_TriangleStripI <$> obj .? "arg0"
      "P_TrianglesI" -> P_TrianglesI <$> obj .? "arg0"
      _ -> Left ("decodeJsonMeshPrimitive - unknown tag: " <> tag)

instance encodeJsonMesh :: EncodeJson Mesh where
  encodeJson v = case v of
    Mesh r ->
      "tag" := "Mesh" ~>
      "mAttributes" := r.mAttributes ~>
      "mPrimitive" := r.mPrimitive ~>
      jsonEmptyObject

instance decodeJsonMesh :: DecodeJson Mesh where
  decodeJson json = do
    obj <- decodeJson json
    tag <- obj .? "tag"
    case tag of
      "Mesh" -> do
        mAttributes <- obj .? "mAttributes"
        mPrimitive <- obj .? "mPrimitive"
        pure $ Mesh
          { mAttributes:mAttributes
          , mPrimitive:mPrimitive
          } 
      _ -> Left ("decodeJsonMesh - unknown tag: " <> tag)