git.iko.soy/typeable/schematic
on union help sign in
319 lines 9.9 kB history raw
1module LensSpec (spec, main) where
3import Control.Lens
4import Data.Kind
5import Data.Proxy
6import Data.Schematic
7import Data.Vinyl
8import Test.Hspec
11type ArraySchema = 'SchemaArray '[ 'AEq 1] ('SchemaNumber '[ 'NGt 10])
13type ArrayField = '("foo", ArraySchema)
15type FieldsSchema =
16 '[ '("bar", 'SchemaOptional ('SchemaText '[ 'TEnum '["foo", "bar"]])), ArrayField]
18type SchemaExample = 'SchemaObject FieldsSchema
20arrayData :: JsonRepr ArraySchema
21arrayData = ReprArray [ReprNumber 13]
23arrayField :: FieldRepr ArrayField
24arrayField = FieldRepr arrayData
26objectData :: Rec FieldRepr FieldsSchema
27objectData = FieldRepr (ReprOptional (Just (ReprText "foo")))
28 :& FieldRepr arrayData
29 :& RNil
31exampleData :: JsonRepr SchemaExample
32exampleData = ReprObject objectData
34type BigRecord = Rec FieldRepr
35 '[ '("f1", 'SchemaNumber '[])
36 , '("f2", 'SchemaNumber '[])
37 , '("f3", 'SchemaNumber '[])
38 , '("f4", 'SchemaNumber '[])
39 , '("f5", 'SchemaNumber '[])
40 , '("f6", 'SchemaNumber '[])
41 , '("f7", 'SchemaNumber '[])
42 , '("f8", 'SchemaNumber '[])
43 , '("f9", 'SchemaNumber '[])
44 , '("f10", 'SchemaNumber '[])
45 , '("f11", 'SchemaNumber '[])
46 , '("f12", 'SchemaNumber '[])
47 , '("f13", 'SchemaNumber '[])
48 , '("f14", 'SchemaNumber '[])
49 , '("f15", 'SchemaNumber '[])
50 , '("f16", 'SchemaNumber '[])
51 , '("f17", 'SchemaNumber '[])
52 , '("f18", 'SchemaNumber '[])
53 , '("f19", 'SchemaNumber '[])
54 , '("f20", 'SchemaNumber '[])
55 , '("f21", 'SchemaNumber '[])
56 , '("f22", 'SchemaNumber '[])
57 , '("f23", 'SchemaNumber '[])
58 , '("f24", 'SchemaNumber '[])
59 , '("f25", 'SchemaNumber '[])
60 , '("f26", 'SchemaNumber '[])
61 , '("f27", 'SchemaNumber '[])
62 , '("f28", 'SchemaNumber '[])
63 , '("f29", 'SchemaNumber '[])
64 , '("f30", 'SchemaNumber '[])
65 , '("f31", 'SchemaNumber '[])
66 , '("f32", 'SchemaNumber '[])
67 , '("f33", 'SchemaNumber '[])
68 , '("f34", 'SchemaNumber '[])
69 , '("f35", 'SchemaNumber '[])
70 , '("f36", 'SchemaNumber '[])
71 , '("f37", 'SchemaNumber '[])
72 , '("f38", 'SchemaNumber '[])
73 , '("f39", 'SchemaNumber '[])
74 , '("f40", 'SchemaNumber '[])
75 , '("f41", 'SchemaNumber '[])
76 , '("f42", 'SchemaNumber '[])
77 , '("f43", 'SchemaNumber '[])
78 , '("f44", 'SchemaNumber '[])
79 , '("f45", 'SchemaNumber '[])
80 , '("f46", 'SchemaNumber '[])
81 , '("f47", 'SchemaNumber '[])
82 , '("f48", 'SchemaNumber '[])
83 , '("f49", 'SchemaNumber '[])
84 , '("f50", 'SchemaNumber '[])
85 , '("f51", 'SchemaNumber '[])
86 , '("f52", 'SchemaNumber '[])
87 , '("f53", 'SchemaNumber '[])
88 , '("f54", 'SchemaNumber '[])
89 , '("f55", 'SchemaNumber '[])
90 , '("f56", 'SchemaNumber '[])
91 , '("f57", 'SchemaNumber '[])
92 , '("f58", 'SchemaNumber '[])
93 , '("f59", 'SchemaNumber '[])
94 , '("f60", 'SchemaNumber '[])
95 , '("f61", 'SchemaNumber '[])
96 , '("f62", 'SchemaNumber '[])
97 , '("f63", 'SchemaNumber '[])
98 , '("f64", 'SchemaNumber '[])
99 , '("f65", 'SchemaNumber '[])
100 , '("f66", 'SchemaNumber '[])
101 , '("f67", 'SchemaNumber '[])
102 , '("f68", 'SchemaNumber '[])
103 , '("f69", 'SchemaNumber '[])
104 , '("f70", 'SchemaNumber '[])
105 , '("f71", 'SchemaNumber '[])
106 , '("f72", 'SchemaNumber '[])
107 , '("f73", 'SchemaNumber '[])
108 , '("f74", 'SchemaNumber '[])
109 , '("f75", 'SchemaNumber '[])
110 , '("f76", 'SchemaNumber '[])
111 , '("f77", 'SchemaNumber '[])
112 , '("f78", 'SchemaNumber '[])
113 , '("f79", 'SchemaNumber '[])
114 , '("f80", 'SchemaNumber '[])
115 , '("f81", 'SchemaNumber '[])
116 , '("f82", 'SchemaNumber '[])
117 , '("f83", 'SchemaNumber '[])
118 , '("f84", 'SchemaNumber '[])
119 , '("f85", 'SchemaNumber '[])
120 , '("f86", 'SchemaNumber '[])
121 , '("f87", 'SchemaNumber '[])
122 , '("f88", 'SchemaNumber '[])
123 , '("f89", 'SchemaNumber '[])
124 , '("f90", 'SchemaNumber '[])
125 , '("f91", 'SchemaNumber '[])
126 , '("f92", 'SchemaNumber '[])
127 , '("f93", 'SchemaNumber '[])
128 , '("f94", 'SchemaNumber '[])
129 , '("f95", 'SchemaNumber '[])
130 , '("f96", 'SchemaNumber '[])
131 , '("f97", 'SchemaNumber '[])
132 , '("f98", 'SchemaNumber '[])
133 , '("f99", 'SchemaNumber '[])
134 , '("f100", 'SchemaNumber '[])
135 , '("f101", 'SchemaNumber '[])
136 , '("f102", 'SchemaNumber '[])
137 , '("f103", 'SchemaNumber '[])
138 , '("f104", 'SchemaNumber '[])
139 , '("f105", 'SchemaNumber '[])
140 , '("f106", 'SchemaNumber '[])
141 , '("f107", 'SchemaNumber '[])
142 , '("f108", 'SchemaNumber '[])
143 , '("f109", 'SchemaNumber '[])
144 , '("f110", 'SchemaNumber '[])
145 , '("f111", 'SchemaNumber '[])
146 , '("f112", 'SchemaNumber '[])
147 , '("f113", 'SchemaNumber '[])
148 , '("f114", 'SchemaNumber '[])
149 , '("f115", 'SchemaNumber '[])
150 , '("f116", 'SchemaNumber '[])
151 , '("f117", 'SchemaNumber '[])
152 , '("f118", 'SchemaNumber '[])
153 , '("f119", 'SchemaNumber '[])
154 , '("f120", 'SchemaNumber '[])
155 , '("f121", 'SchemaNumber '[])
156 , '("f122", 'SchemaNumber '[])
157 , '("f123", 'SchemaNumber '[])
158 , '("f124", 'SchemaNumber '[])
159 , '("f125", 'SchemaNumber '[])
160 , '("f126", 'SchemaNumber '[])
161 , '("f127", 'SchemaNumber '[])
162 , '("f128", 'SchemaNumber '[])
163 , '("f129", 'SchemaNumber '[])
164 , '("f130", 'SchemaNumber '[])
165 ]
167_bigRecord :: BigRecord
168_bigRecord =
169 FieldRepr (ReprNumber 1)
170 :& FieldRepr (ReprNumber 2)
171 :& FieldRepr (ReprNumber 3)
172 :& FieldRepr (ReprNumber 4)
173 :& FieldRepr (ReprNumber 5)
174 :& FieldRepr (ReprNumber 6)
175 :& FieldRepr (ReprNumber 7)
176 :& FieldRepr (ReprNumber 8)
177 :& FieldRepr (ReprNumber 9)
178 :& FieldRepr (ReprNumber 10)
179 :& FieldRepr (ReprNumber 11)
180 :& FieldRepr (ReprNumber 12)
181 :& FieldRepr (ReprNumber 13)
182 :& FieldRepr (ReprNumber 14)
183 :& FieldRepr (ReprNumber 15)
184 :& FieldRepr (ReprNumber 16)
185 :& FieldRepr (ReprNumber 17)
186 :& FieldRepr (ReprNumber 18)
187 :& FieldRepr (ReprNumber 19)
188 :& FieldRepr (ReprNumber 20)
189 :& FieldRepr (ReprNumber 21)
190 :& FieldRepr (ReprNumber 22)
191 :& FieldRepr (ReprNumber 23)
192 :& FieldRepr (ReprNumber 24)
193 :& FieldRepr (ReprNumber 25)
194 :& FieldRepr (ReprNumber 26)
195 :& FieldRepr (ReprNumber 27)
196 :& FieldRepr (ReprNumber 28)
197 :& FieldRepr (ReprNumber 29)
198 :& FieldRepr (ReprNumber 30)
199 :& FieldRepr (ReprNumber 31)
200 :& FieldRepr (ReprNumber 32)
201 :& FieldRepr (ReprNumber 33)
202 :& FieldRepr (ReprNumber 34)
203 :& FieldRepr (ReprNumber 35)
204 :& FieldRepr (ReprNumber 36)
205 :& FieldRepr (ReprNumber 37)
206 :& FieldRepr (ReprNumber 38)
207 :& FieldRepr (ReprNumber 39)
208 :& FieldRepr (ReprNumber 40)
209 :& FieldRepr (ReprNumber 41)
210 :& FieldRepr (ReprNumber 42)
211 :& FieldRepr (ReprNumber 43)
212 :& FieldRepr (ReprNumber 44)
213 :& FieldRepr (ReprNumber 45)
214 :& FieldRepr (ReprNumber 46)
215 :& FieldRepr (ReprNumber 47)
216 :& FieldRepr (ReprNumber 48)
217 :& FieldRepr (ReprNumber 49)
218 :& FieldRepr (ReprNumber 50)
219 :& FieldRepr (ReprNumber 51)
220 :& FieldRepr (ReprNumber 52)
221 :& FieldRepr (ReprNumber 53)
222 :& FieldRepr (ReprNumber 54)
223 :& FieldRepr (ReprNumber 55)
224 :& FieldRepr (ReprNumber 56)
225 :& FieldRepr (ReprNumber 57)
226 :& FieldRepr (ReprNumber 58)
227 :& FieldRepr (ReprNumber 59)
228 :& FieldRepr (ReprNumber 60)
229 :& FieldRepr (ReprNumber 61)
230 :& FieldRepr (ReprNumber 62)
231 :& FieldRepr (ReprNumber 63)
232 :& FieldRepr (ReprNumber 64)
233 :& FieldRepr (ReprNumber 65)
234 :& FieldRepr (ReprNumber 66)
235 :& FieldRepr (ReprNumber 67)
236 :& FieldRepr (ReprNumber 68)
237 :& FieldRepr (ReprNumber 69)
238 :& FieldRepr (ReprNumber 70)
239 :& FieldRepr (ReprNumber 71)
240 :& FieldRepr (ReprNumber 72)
241 :& FieldRepr (ReprNumber 73)
242 :& FieldRepr (ReprNumber 74)
243 :& FieldRepr (ReprNumber 75)
244 :& FieldRepr (ReprNumber 76)
245 :& FieldRepr (ReprNumber 77)
246 :& FieldRepr (ReprNumber 78)
247 :& FieldRepr (ReprNumber 79)
248 :& FieldRepr (ReprNumber 80)
249 :& FieldRepr (ReprNumber 81)
250 :& FieldRepr (ReprNumber 82)
251 :& FieldRepr (ReprNumber 83)
252 :& FieldRepr (ReprNumber 84)
253 :& FieldRepr (ReprNumber 85)
254 :& FieldRepr (ReprNumber 86)
255 :& FieldRepr (ReprNumber 87)
256 :& FieldRepr (ReprNumber 88)
257 :& FieldRepr (ReprNumber 89)
258 :& FieldRepr (ReprNumber 90)
259 :& FieldRepr (ReprNumber 91)
260 :& FieldRepr (ReprNumber 92)
261 :& FieldRepr (ReprNumber 93)
262 :& FieldRepr (ReprNumber 94)
263 :& FieldRepr (ReprNumber 95)
264 :& FieldRepr (ReprNumber 96)
265 :& FieldRepr (ReprNumber 97)
266 :& FieldRepr (ReprNumber 98)
267 :& FieldRepr (ReprNumber 99)
268 :& FieldRepr (ReprNumber 100)
269 :& FieldRepr (ReprNumber 101)
270 :& FieldRepr (ReprNumber 102)
271 :& FieldRepr (ReprNumber 103)
272 :& FieldRepr (ReprNumber 104)
273 :& FieldRepr (ReprNumber 105)
274 :& FieldRepr (ReprNumber 106)
275 :& FieldRepr (ReprNumber 107)
276 :& FieldRepr (ReprNumber 108)
277 :& FieldRepr (ReprNumber 109)
278 :& FieldRepr (ReprNumber 110)
279 :& FieldRepr (ReprNumber 111)
280 :& FieldRepr (ReprNumber 112)
281 :& FieldRepr (ReprNumber 113)
282 :& FieldRepr (ReprNumber 114)
283 :& FieldRepr (ReprNumber 115)
284 :& FieldRepr (ReprNumber 116)
285 :& FieldRepr (ReprNumber 117)
286 :& FieldRepr (ReprNumber 118)
287 :& FieldRepr (ReprNumber 119)
288 :& FieldRepr (ReprNumber 120)
289 :& FieldRepr (ReprNumber 121)
290 :& FieldRepr (ReprNumber 122)
291 :& FieldRepr (ReprNumber 123)
292 :& FieldRepr (ReprNumber 124)
293 :& FieldRepr (ReprNumber 125)
294 :& FieldRepr (ReprNumber 126)
295 :& FieldRepr (ReprNumber 127)
296 :& FieldRepr (ReprNumber 128)
297 :& FieldRepr (ReprNumber 129)
298 :& FieldRepr (ReprNumber 130)
299 :& RNil
301spec :: Spec
302spec = do
303 let
304 newFooVal = FieldRepr $ ReprArray [ReprNumber 15]
305 fooProxy = Proxy @"foo"
306 it "gets the field from an object" $ do
307 fget fooProxy objectData `shouldBe` arrayField
308 it "sets the object field" $ do
309 fget fooProxy (fput newFooVal objectData) `shouldBe` newFooVal
311 describe "(using lens library) " $ do
312 it "get the field from an object" $ do
313 objectData ^. flens (Proxy @"foo") `shouldBe` arrayField
314 it "sets the object field" $ do
315 set (flens (Proxy @"foo")) newFooVal objectData ^. flens (Proxy @"foo")
316 `shouldBe` newFooVal
318main :: IO ()
319main = hspec spec