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 +5/−0
- bin/Main.hs +13/−1
- cuddle.cabal +1/−1
- src/Codec/CBOR/Cuddle/CBOR/Gen.hs +5/−7
- test/Test/Codec/CBOR/Cuddle/CDDL/GeneratorSpec.hs +15/−2
- test/Test/Codec/CBOR/Cuddle/CDDL/Validator.hs +8/−2
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)