Skip to content

Commit 10aac0f

Browse files
committed
Use custom generator
1 parent 42c8e91 commit 10aac0f

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

src/Codec/CBOR/Cuddle/CBOR/Gen.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ import System.Random.Stateful (
6161
import System.Random.Stateful (
6262
SplitGen (..)
6363
)
64-
import Codec.CBOR.Cuddle.CDDL.CBORGenerator (WrappedTerm (..))
64+
import Codec.CBOR.Cuddle.CDDL.CBORGenerator (WrappedTerm (..), CBORGenerator (..))
6565
import Codec.CBOR.Cuddle.IndexMappable (IndexMappable (..))
6666
#endif
6767

@@ -358,22 +358,22 @@ genForCTree (CTree.Tag tag node) = do
358358
case enc of
359359
S x -> pure $ S $ TTagged tag x
360360
_ -> error "Tag controller does not correspond to a single term"
361-
genForCTree (CTree.CTreeE x) = genForNode x
361+
genForCTree (CTree.CTreeE (MRuleRef n)) = genForNode n
362+
genForCTree (CTree.CTreeE (MGenerator (CBORGenerator gen) _)) = gen StateGenM
362363

363-
genForNode :: RandomGen g => CTree.Node MonoReferenced -> M g WrappedTerm
364+
genForNode :: RandomGen g => Name -> M g WrappedTerm
364365
genForNode = genForCTree <=< resolveRef
365366

366367
-- | Take a reference and resolve it to the relevant Tree, following multiple
367368
-- links if necessary.
368-
resolveRef :: RandomGen g => CTree.Node MonoReferenced -> M g (CTree MonoReferenced)
369-
resolveRef (MRuleRef n) = do
369+
resolveRef :: RandomGen g => Name -> M g (CTree MonoReferenced)
370+
resolveRef n = do
370371
(CTreeRoot cddl) <- ask @"cddl"
371372
-- Since we follow a reference, we increase the 'depth' of the gen monad.
372373
modify @"depth" (+ 1)
373374
case Map.lookup n cddl of
374375
Nothing -> error $ "Unbound reference: " <> show n
375376
Just val -> pure val
376-
resolveRef (MGenerator _ _) = undefined
377377

378378
-- | Generate a CBOR Term corresponding to a top-level name.
379379
--

src/Codec/CBOR/Cuddle/CDDL/Resolve.hs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,4 +566,11 @@ fullResolveCDDL cddl = do
566566
buildMonoCTree rCTree
567567

568568
instance IndexMappable CTree DistReferenced DistReferencedNoGen where
569-
mapIndex = undefined
569+
mapIndex = foldCTree mapExt mapIndex
570+
where
571+
mapExt (DRef x) = CTreeE . DHRef $ mapIndex x
572+
mapExt (DGenerator _ x) = mapIndex x
573+
574+
instance IndexMappable DistRef DistReferenced DistReferencedNoGen where
575+
mapIndex (GenericRef n) = GenericRef n
576+
mapIndex (RuleRef n args) = RuleRef n $ mapIndex <$> args

0 commit comments

Comments
 (0)