packages feed

cuddle 1.3.0.0 → 1.4.0.0

raw patch · 6 files changed

+47/−13 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Codec.CBOR.Cuddle.CBOR.Gen: generateFromName :: HasCallStack => CTreeRoot GenPhase -> Name -> AntiGen Term
+ Codec.CBOR.Cuddle.CBOR.Gen: generateFromName :: HasCallStack => Name -> CBORGen Term

Files

CHANGELOG.md view
@@ -1,5 +1,10 @@ # Changelog for `cuddle` +## 1.4.0.0++* Changed `generateFromName` to return a `CBORGen` instead of `AntiGen`+* Add `no-twiddle` option+ ## 1.3.0.0  * Replace `Int` progress measure with lexicographic `Progress` type for more accurate trace comparison
bin/Main.hs view
@@ -15,6 +15,7 @@   prettyValidationTrace,  ) import Codec.CBOR.Cuddle.CDDL (CDDL, Name (..), fromRules, sortCDDL)+import Codec.CBOR.Cuddle.CDDL.CBORGenerator (GenEnv (..), runCBORGen) import Codec.CBOR.Cuddle.CDDL.CTree (CTreeRoot) import Codec.CBOR.Cuddle.CDDL.Postlude (appendPostlude) import Codec.CBOR.Cuddle.CDDL.Resolve (@@ -113,6 +114,7 @@   , goSeed :: Maybe Int   , goSize :: Int   , goNegative :: Bool+  , goTwiddle :: Bool   , itemName :: T.Text   } @@ -155,6 +157,11 @@           <> short 'n'           <> help "Generate a negative example"       )+    <*> option+      (not <$> auto)+      ( long "no-twiddle"+          <> help "Do not generate indefinite encodings"+      )     <*> argument       str       (metavar "RULE" <> help "Name of the CDDL rule to generate a CBOR term for")@@ -370,7 +377,12 @@           zapN             | goNegative = 1             | otherwise = 0-          term = runGen seed goSize . zapAntiGen zapN $ generateFromName (mapIndex mt) (Name itemName)+          env =+            GenEnv+              { geRoot = mapIndex mt+              , geTwiddle = goTwiddle+              }+          term = runGen seed goSize . zapAntiGen zapN . runCBORGen env $ generateFromName (Name itemName)           formatted = formatTerm term outputFormat         case outputTo of           Just outputPath -> BS.writeFile outputPath formatted
cuddle.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: cuddle-version: 1.3.0.0+version: 1.4.0.0 synopsis: CDDL Generator and test utilities description:   Cuddle is a library for generating and manipulating [CDDL](https://datatracker.ietf.org/doc/html/rfc8610).
src/Codec/CBOR/Cuddle/CBOR/Gen.hs view
@@ -38,13 +38,11 @@   XXCTree (..),   liftAntiGen,   lookupCddl,-  runCBORGen,   withAntiGen,   withTwiddle,  ) import Codec.CBOR.Cuddle.CDDL.CTree (   CTree (..),-  CTreeRoot (..),   PTerm (..),   foldCTree,   nintMin,@@ -590,13 +588,13 @@ -- This will throw an error if the generated item does not correspond to a -- single CBOR term (e.g. if the name resolves to a group, which cannot be -- generated outside a context).-generateFromName :: HasCallStack => CTreeRoot GenPhase -> Name -> AntiGen Term-generateFromName root@(CTreeRoot cddlMap) n = do-  let env = GenEnv {geRoot = root, geTwiddle = True}-  case Map.lookup n cddlMap of+generateFromName :: HasCallStack => Name -> CBORGen Term+generateFromName n = do+  mRule <- lookupCddl n+  case mRule of     Nothing -> error $ "Unbound reference: " <> show n     Just val ->-      runCBORGen env (genForCTree val) >>= \case+      genForCTree val >>= \case         S x -> pure x         _ ->           error $
test/Test/Codec/CBOR/Cuddle/CDDL/GeneratorSpec.hs view
@@ -7,6 +7,7 @@ import Codec.CBOR.Cuddle.CBOR.Gen (GenPhase, generateFromName) import Codec.CBOR.Cuddle.CBOR.Validator (validateCBOR) import Codec.CBOR.Cuddle.CDDL (Name)+import Codec.CBOR.Cuddle.CDDL.CBORGenerator (GenEnv (..), runCBORGen) import Codec.CBOR.Cuddle.CDDL.CTree (CTreeRoot (..)) import Codec.CBOR.Cuddle.CDDL.Resolve (MonoReferenced, MonoSimple, fullResolveCDDL) import Codec.CBOR.Cuddle.Huddle (Huddle, toCDDL)@@ -38,7 +39,13 @@ import Text.Pretty.Simple (pShow)  generateCDDL :: CTreeRoot GenPhase -> Gen Term-generateCDDL cddl = runAntiGen $ generateFromName cddl "root"+generateCDDL cddl = runAntiGen . runCBORGen env $ generateFromName "root"+  where+    env =+      GenEnv+        { geRoot = cddl+        , geTwiddle = True+        }  tryResolveHuddle :: HasCallStack => Huddle -> SpecM () (CTreeRoot MonoReferenced) tryResolveHuddle huddle = do@@ -48,7 +55,13 @@  expectZapInvalidates :: CTreeRoot MonoReferenced -> Name -> Property expectZapInvalidates cddl name = property $ do-  res@ZapResult {zrValue} <- zapAntiGenResult 1 $ generateFromName (mapIndex cddl) name+  let+    env =+      GenEnv+        { geRoot = mapIndex cddl+        , geTwiddle = True+        }+  res@ZapResult {zrValue} <- zapAntiGenResult 1 . runCBORGen env $ generateFromName name   let     bs = toStrictByteString $ encodeTerm zrValue     validationRes = validateCBOR bs name $ mapIndex cddl
test/Test/Codec/CBOR/Cuddle/CDDL/Validator.hs view
@@ -22,7 +22,7 @@   prettyValidationTrace,  ) import Codec.CBOR.Cuddle.CDDL (Name (..))-import Codec.CBOR.Cuddle.CDDL.CBORGenerator (CustomValidatorResult (..))+import Codec.CBOR.Cuddle.CDDL.CBORGenerator (CustomValidatorResult (..), GenEnv (..), runCBORGen) import Codec.CBOR.Cuddle.CDDL.CTree (CTreeRoot (..)) import Codec.CBOR.Cuddle.CDDL.CTree qualified as CTree import Codec.CBOR.Cuddle.CDDL.Postlude (appendPostlude)@@ -97,7 +97,13 @@ genAndValidateRule :: String -> Name -> CTreeRoot MonoReferenced -> Spec genAndValidateRule description name resolvedCddl =   prop description $ do-    cborTerm <- runAntiGen $ generateFromName (mapIndex resolvedCddl) name+    let+      genEnv =+        GenEnv+          { geRoot = mapIndex resolvedCddl+          , geTwiddle = True+          }+    cborTerm <- runAntiGen . runCBORGen genEnv $ generateFromName name     let       generatedCbor = toStrictByteString $ encodeTerm cborTerm       res = validateCBOR generatedCbor name (mapIndex resolvedCddl)