11
11
{-# OPTIONS_GHC -Wno-unticked-promoted-constructors #-}
12
12
13
13
-- | Generate example CBOR given a CDDL specification
14
- module Codec.CBOR.Cuddle.CBOR.Gen where
14
+ module Codec.CBOR.Cuddle.CBOR.Gen ( generateCBORTerm ) where
15
15
16
16
import Capability.Reader
17
17
import Capability.Sink (HasSink )
@@ -28,6 +28,8 @@ import Codec.CBOR.Cuddle.CDDL.CtlOp qualified as CtlOp
28
28
import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm (.. ))
29
29
import Codec.CBOR.Cuddle.CDDL.Resolve (MonoRef (.. ))
30
30
import Codec.CBOR.Term (Term (.. ))
31
+ import Codec.CBOR.Term qualified as CBOR
32
+ import Codec.CBOR.Write qualified as CBOR
31
33
import Control.Monad (replicateM , (<=<) )
32
34
import Control.Monad.Reader (Reader , runReader )
33
35
import Control.Monad.State.Strict (StateT , runStateT )
@@ -57,8 +59,6 @@ import System.Random.Stateful
57
59
-- Generator infrastructure
58
60
--------------------------------------------------------------------------------
59
61
60
- type TypeMap = Map. Map Name (Gen Term )
61
-
62
62
-- | Generator context, parametrised over the type of the random seed
63
63
data GenEnv g = GenEnv
64
64
{ cddl :: CTreeRoot' Identity MonoRef ,
@@ -306,6 +306,11 @@ genForCTree (CTree.Control op target controller) = do
306
306
error $
307
307
" Invalid controller for .size operator: "
308
308
<> show controller
309
+ (CtlOp. Cbor , _) -> do
310
+ enc <- genForCTree ct
311
+ case enc of
312
+ S x -> pure . S . TBytes . CBOR. toStrictByteString $ CBOR. encodeTerm x
313
+ _ -> error " Controller does not correspond to a single term"
309
314
_ -> genForNode target
310
315
genForCTree (CTree. Enum node) = do
311
316
tree <- resolveIfRef node
0 commit comments