From 7a20ea5225df5e5305f60f41289a43584ef76527 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Sun, 26 Apr 2020 21:06:52 +0200 Subject: [PATCH] more complex prototype example of modular parsing --- Hash2Pub/src/asn1test.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Hash2Pub/src/asn1test.hs b/Hash2Pub/src/asn1test.hs index d9e8dae..cd8fef1 100644 --- a/Hash2Pub/src/asn1test.hs +++ b/Hash2Pub/src/asn1test.hs @@ -8,6 +8,7 @@ import qualified Data.ASN1.Types as ASN1 -- asn1-types package import qualified Data.ASN1.Parse as ASN1P import qualified Data.ByteString as BS import Data.Maybe (fromMaybe) +import Debug.Trace (trace) -- import Hash2Pub.Fedichord @@ -30,7 +31,17 @@ getUnicodeField ((ASN1.Start ASN1.Sequence) : _ : (ASN1.ASN1String strASN1) : _) testParser :: ASN1P.ParseASN1 String testParser = do - show <$> ASN1P.getNext + foo <- ASN1P.onNextContainer ASN1.Sequence getAll + return $ show foo + +getAll :: ASN1P.ParseASN1 [ASN1.ASN1] +getAll = ASN1P.getMany ASN1P.getNext + +-- | run a function of the next elements of a container of specified type +onNextContainer' :: ASN1.ASN1ConstructionType -> ASN1P.ParseASN1 a -> ASN1P.ParseASN1 a +onNextContainer' ty f = do + cont <- ASN1P.getNextContainer ty + either ASN1P.throwParseError return . trace (show cont) $ ASN1P.runParseASN1 f cont --stringParser asn1obj = -- fmap (fromMaybe "" $ ASN1.asn1CharacterToString) ASN1P.getNext