Skip to content

Commit 8d17bcf

Browse files
committed
Support generating encoded CBOR
1 parent e6f34fc commit 8d17bcf

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

cuddle.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cabal-version: 3.4
22
name: cuddle
3-
version: 0.1.8.0
3+
version: 0.1.9.0
44
synopsis: CDDL Generator and test utilities
55

66
-- description:

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
{-# OPTIONS_GHC -Wno-unticked-promoted-constructors #-}
1212

1313
-- | Generate example CBOR given a CDDL specification
14-
module Codec.CBOR.Cuddle.CBOR.Gen where
14+
module Codec.CBOR.Cuddle.CBOR.Gen (generateCBORTerm) where
1515

1616
import Capability.Reader
1717
import Capability.Sink (HasSink)
@@ -28,6 +28,8 @@ import Codec.CBOR.Cuddle.CDDL.CtlOp qualified as CtlOp
2828
import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm (..))
2929
import Codec.CBOR.Cuddle.CDDL.Resolve (MonoRef (..))
3030
import Codec.CBOR.Term (Term (..))
31+
import Codec.CBOR.Term qualified as CBOR
32+
import Codec.CBOR.Write qualified as CBOR
3133
import Control.Monad (replicateM, (<=<))
3234
import Control.Monad.Reader (Reader, runReader)
3335
import Control.Monad.State.Strict (StateT, runStateT)
@@ -57,8 +59,6 @@ import System.Random.Stateful
5759
-- Generator infrastructure
5860
--------------------------------------------------------------------------------
5961

60-
type TypeMap = Map.Map Name (Gen Term)
61-
6262
-- | Generator context, parametrised over the type of the random seed
6363
data GenEnv g = GenEnv
6464
{ cddl :: CTreeRoot' Identity MonoRef,
@@ -306,6 +306,11 @@ genForCTree (CTree.Control op target controller) = do
306306
error $
307307
"Invalid controller for .size operator: "
308308
<> 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"
309314
_ -> genForNode target
310315
genForCTree (CTree.Enum node) = do
311316
tree <- resolveIfRef node

0 commit comments

Comments
 (0)