Skip to content

Commit effb614

Browse files
committed
Add support for Tags in CTree
These do have an impact on the generated CBOR.
1 parent c73e4cd commit effb614

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
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.12.0
3+
version: 0.1.20.0
44
synopsis: CDDL Generator and test utilities
55

66
-- description:

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,11 @@ genForCTree (CTree.Enum node) = do
318318
genForNode $ nodes !! ix
319319
_ -> error "Attempt to form an enum from something other than a group"
320320
genForCTree (CTree.Unwrap node) = genForCTree =<< resolveIfRef node
321+
genForCTree (CTree.Tag tag node) = do
322+
enc <- genForNode node
323+
case enc of
324+
S x -> pure $ S $ TTagged tag x
325+
_ -> error "Tag controller does not correspond to a single term"
321326

322327
genForNode :: (RandomGen g) => CTree.Node MonoRef -> M g WrappedTerm
323328
genForNode = genForCTree <=< resolveIfRef

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm)
1313
import Data.Hashable (Hashable)
1414
import Data.List.NonEmpty qualified as NE
1515
import Data.Map.Strict qualified as Map
16+
import Data.Word (Word64)
1617
import GHC.Generics (Generic)
1718

1819
--------------------------------------------------------------------------------
@@ -42,6 +43,7 @@ data CTree f
4243
| Control {op :: CtlOp, target :: Node f, controller :: Node f}
4344
| Enum (Node f)
4445
| Unwrap (Node f)
46+
| Tag Word64 (Node f)
4547
deriving (Generic)
4648

4749
-- | Traverse the CTree, carrying out the given operation at each node
@@ -67,6 +69,7 @@ traverseCTree atNode (Control o t c) = do
6769
pure $ Control o t' c'
6870
traverseCTree atNode (Enum ref) = Enum <$> atNode ref
6971
traverseCTree atNode (Unwrap ref) = Unwrap <$> atNode ref
72+
traverseCTree atNode (Tag i ref) = Tag i <$> atNode ref
7073

7174
type Node f = f (CTree f)
7275

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,11 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
183183
Ref n (fromGenArgs margs)
184184
toCTreeT2 (T2Enum g) = toCTreeEnum g
185185
toCTreeT2 (T2EnumRef n margs) = Ref n $ fromGenArgs margs
186-
toCTreeT2 (T2Tag _mint t0) =
186+
toCTreeT2 (T2Tag Nothing t0) =
187187
-- Currently not validating tags
188188
toCTreeT0 t0
189+
toCTreeT2 (T2Tag (Just tag) t0) =
190+
It . CTree.Tag tag $ toCTreeT0 t0
189191
toCTreeT2 (T2DataItem _maj _mmin) =
190192
-- We don't validate numerical items yet
191193
It $ CTree.Postlude PTAny

0 commit comments

Comments
 (0)