1{-# OPTIONS_GHC -fno-warn-orphans #-}
2module Data.Schematic.Generator where
5import Data.Schematic.Schema
8import Data.Text (Text, pack)
9import qualified Data.Vector as V
11import Data.Schematic.Generator.Regex
12import Data.Schematic.Verifier
13import Test.SmallCheck.Series
21textLengthSeries :: Monad m => [VerifiedTextConstraint] -> Series m Text
24 [VTEq eq] -> pure $ pack $ take (fromIntegral eq) $ cycle "sample"
25 [VTBounds ml mh] -> do
26 let l = fromMaybe minLow (fromIntegral <$> ml) + 1
27 h = fromMaybe maxHigh (fromIntegral <$> mh) - 1
28 n <- generate $ \depth -> take depth [l .. h]
29 pure $ pack $ take (fromIntegral n) $ cycle "sample"
32textEnumSeries :: Monad m => [Text] -> Series m Text
33textEnumSeries enum = generate $ \depth -> take depth enum
35textSeries :: Monad m => [DemotedTextConstraint] -> Series m Text
37 let mvcs = verifyTextConstraints cs
42 Nothing -> pure "error"
44textSeries' :: Monad m => [VerifiedTextConstraint] -> Series m Text
45textSeries' [] = pure "sample"
47 let enums = listToMaybe [x | VTEnum x <- vcs]
49 Just e -> textEnumSeries e
51 let regexps = listToMaybe [x | VTRegex x _ _ <- vcs]
53 Just e -> regexSeries e
54 Nothing -> textLengthSeries vcs
56numberSeries :: Monad m => [DemotedNumberConstraint] -> Series m Scientific
58 let mvcs = verifyNumberConstraints cs
61 n <- numberSeries' vcs
65numberSeries' :: Monad m => VerifiedNumberConstraint -> Series m Scientific
68 VNEq eq -> pure $ fromIntegral eq
70 let l = fromMaybe minLow (fromIntegral <$> ml) + 1
71 h = fromMaybe maxHigh (fromIntegral <$> mh) - 1
72 n <- generate $ \depth -> take depth [l .. h]
76 :: (Monad m, Serial m (JsonRepr s))
77 => [DemotedArrayConstraint]
78 -> Series m (V.Vector (JsonRepr s))
80 let mvcs = verifyArrayConstraint cs
82 Just vcs -> arraySeries' vcs
83 Nothing -> pure V.empty
86 :: forall m s. (Monad m, Serial m (JsonRepr s))
87 => Maybe VerifiedArrayConstraint
88 -> Series m (V.Vector (JsonRepr s))
90 objs <- V.replicateM (maybe minRepeat f ml) (series :: Series m (JsonRepr s))
93 f (VAEq l) = fromIntegral l
95instance (Monad m, Serial m Text, SingI cs)
96 => Serial m (JsonRepr ('SchemaText cs)) where
97 series = decDepth $ fmap ReprText $ textSeries $ fromSing (sing :: Sing cs)
99instance (Monad m, Serial m Scientific, SingI cs)
100 => Serial m (JsonRepr ('SchemaNumber cs)) where
101 series = decDepth $ fmap ReprNumber
102 $ numberSeries $ fromSing (sing :: Sing cs)
104instance Monad m => Serial m (JsonRepr 'SchemaNull) where
105 series = cons0 ReprNull
107instance (Serial m (JsonRepr s), Serial m (V.Vector (JsonRepr s)), SingI cs)
108 => Serial m (JsonRepr ('SchemaArray cs s)) where
109 series = decDepth $ fmap ReprArray
110 $ arraySeries $ fromSing (sing :: Sing cs)
112instance (Serial m (JsonRepr s))
113 => Serial m (JsonRepr ('SchemaOptional s)) where
114 series = cons1 ReprOptional
116instance (Monad m, Serial m (Rec FieldRepr fs))
117 => Serial m (JsonRepr ('SchemaObject fs)) where
118 series = cons1 ReprObject
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list