@@ -0,0 +1,46 @@
1+module LensSpec (spec, main) where
2+
3+import Control.Lens
4+import Data.Kind
5+import Data.Proxy
6+import Data.Schematic
7+import Data.Vinyl
8+import Test.Hspec
9+
10+
11+type ArraySchema = 'SchemaArray '[AEq 1] ('SchemaNumber '[NGt 10])
12+
13+type ArrayField = '("foo", ArraySchema)
14+
15+type FieldsSchema =
16+ '[ ArrayField, '("bar", 'SchemaOptional ('SchemaText '[TEnum '["foo", "bar"]]))]
17+
18+type SchemaExample = 'SchemaObject FieldsSchema
19+
20+arrayData :: JsonRepr ArraySchema
21+arrayData = ReprArray [ReprNumber 13]
22+
23+arrayField :: FieldRepr ArrayField
24+arrayField = FieldRepr arrayData
25+
26+objectData :: Rec FieldRepr FieldsSchema
27+objectData = FieldRepr arrayData
28+ :& FieldRepr (ReprOptional (Just (ReprText "foo")))
29+ :& RNil
30+
31+exampleData :: JsonRepr SchemaExample
32+exampleData = ReprObject objectData
33+
34+spec :: Spec
35+spec = do
36+ it "gets the field from an object" $ do
37+ fget (Proxy :: Proxy "foo") objectData == arrayField
38+ -- it "sets the object field" $ do
39+ -- fset (FieldRepr :: FieldRepr '("foo", ArrayField))
40+
41+ describe "(using lens library) " $ do
42+ it "get the field from an object" $ do
43+ objectData ^. (flens (Proxy :: Proxy "foo")) == arrayField
44+
45+main :: IO ()
46+main = hspec spec