ogma-language-jsonspec 1.2.0 → 1.3.0
raw patch · 3 files changed
+37/−27 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Language.JSONSpec.Parser: showErrorsM :: Show a => Maybe (Either a b) -> Either String (Maybe b)
- Language.JSONSpec.Parser: JSONFormat :: String -> String -> String -> String -> String -> String -> String -> String -> String -> String -> String -> JSONFormat
+ Language.JSONSpec.Parser: JSONFormat :: Maybe String -> String -> String -> Maybe String -> Maybe String -> String -> Maybe String -> String -> String -> Maybe String -> String -> JSONFormat
- Language.JSONSpec.Parser: JSONFormatInternal :: [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> JSONFormatInternal
+ Language.JSONSpec.Parser: JSONFormatInternal :: Maybe [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> Maybe [JSONPathElement] -> Maybe [JSONPathElement] -> [JSONPathElement] -> Maybe [JSONPathElement] -> [JSONPathElement] -> [JSONPathElement] -> Maybe [JSONPathElement] -> [JSONPathElement] -> JSONFormatInternal
- Language.JSONSpec.Parser: [jfiExternalVarType] :: JSONFormatInternal -> [JSONPathElement]
+ Language.JSONSpec.Parser: [jfiExternalVarType] :: JSONFormatInternal -> Maybe [JSONPathElement]
- Language.JSONSpec.Parser: [jfiExternalVars] :: JSONFormatInternal -> [JSONPathElement]
+ Language.JSONSpec.Parser: [jfiExternalVars] :: JSONFormatInternal -> Maybe [JSONPathElement]
- Language.JSONSpec.Parser: [jfiInternalVarType] :: JSONFormatInternal -> [JSONPathElement]
+ Language.JSONSpec.Parser: [jfiInternalVarType] :: JSONFormatInternal -> Maybe [JSONPathElement]
- Language.JSONSpec.Parser: [jfiInternalVars] :: JSONFormatInternal -> [JSONPathElement]
+ Language.JSONSpec.Parser: [jfiInternalVars] :: JSONFormatInternal -> Maybe [JSONPathElement]
- Language.JSONSpec.Parser: [jfiRequirementDesc] :: JSONFormatInternal -> [JSONPathElement]
+ Language.JSONSpec.Parser: [jfiRequirementDesc] :: JSONFormatInternal -> Maybe [JSONPathElement]
- Language.JSONSpec.Parser: [specExternalVarType] :: JSONFormat -> String
+ Language.JSONSpec.Parser: [specExternalVarType] :: JSONFormat -> Maybe String
- Language.JSONSpec.Parser: [specExternalVars] :: JSONFormat -> String
+ Language.JSONSpec.Parser: [specExternalVars] :: JSONFormat -> Maybe String
- Language.JSONSpec.Parser: [specInternalVarType] :: JSONFormat -> String
+ Language.JSONSpec.Parser: [specInternalVarType] :: JSONFormat -> Maybe String
- Language.JSONSpec.Parser: [specInternalVars] :: JSONFormat -> String
+ Language.JSONSpec.Parser: [specInternalVars] :: JSONFormat -> Maybe String
- Language.JSONSpec.Parser: [specRequirementDesc] :: JSONFormat -> String
+ Language.JSONSpec.Parser: [specRequirementDesc] :: JSONFormat -> Maybe String
Files
- CHANGELOG.md +5/−0
- ogma-language-jsonspec.cabal +1/−1
- src/Language/JSONSpec/Parser.hs +31/−26
CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for ogma-language-jsonspec +## [1.3.0] - 2024-03-21++* Version bump 1.3.0 (#133).+* Make some fields in JSON format spec optional (#122).+ ## [1.2.0] - 2024-01-21 * Version bump 1.2.0 (#117).
ogma-language-jsonspec.cabal view
@@ -32,7 +32,7 @@ build-type: Simple name: ogma-language-jsonspec-version: 1.2.0+version: 1.3.0 homepage: http://nasa.gov license: OtherLicense license-file: LICENSE.pdf
src/Language/JSONSpec/Parser.hs view
@@ -52,46 +52,46 @@ import Data.OgmaSpec data JSONFormat = JSONFormat- { specInternalVars :: String+ { specInternalVars :: Maybe String , specInternalVarId :: String , specInternalVarExpr :: String- , specInternalVarType :: String- , specExternalVars :: String+ , specInternalVarType :: Maybe String+ , specExternalVars :: Maybe String , specExternalVarId :: String- , specExternalVarType :: String+ , specExternalVarType :: Maybe String , specRequirements :: String , specRequirementId :: String- , specRequirementDesc :: String+ , specRequirementDesc :: Maybe String , specRequirementExpr :: String } data JSONFormatInternal = JSONFormatInternal- { jfiInternalVars :: [JSONPathElement]+ { jfiInternalVars :: Maybe [JSONPathElement] , jfiInternalVarId :: [JSONPathElement] , jfiInternalVarExpr :: [JSONPathElement]- , jfiInternalVarType :: [JSONPathElement]- , jfiExternalVars :: [JSONPathElement]+ , jfiInternalVarType :: Maybe [JSONPathElement]+ , jfiExternalVars :: Maybe [JSONPathElement] , jfiExternalVarId :: [JSONPathElement]- , jfiExternalVarType :: [JSONPathElement]+ , jfiExternalVarType :: Maybe [JSONPathElement] , jfiRequirements :: [JSONPathElement] , jfiRequirementId :: [JSONPathElement]- , jfiRequirementDesc :: [JSONPathElement]+ , jfiRequirementDesc :: Maybe [JSONPathElement] , jfiRequirementExpr :: [JSONPathElement] } parseJSONFormat :: JSONFormat -> Either String JSONFormatInternal parseJSONFormat jsonFormat = do- jfi2 <- showErrors $ parseJSONPath (pack (specInternalVars jsonFormat))- jfi3 <- showErrors $ parseJSONPath (pack (specInternalVarId jsonFormat))- jfi4 <- showErrors $ parseJSONPath (pack (specInternalVarExpr jsonFormat))- jfi5 <- showErrors $ parseJSONPath (pack (specInternalVarType jsonFormat))- jfi6 <- showErrors $ parseJSONPath (pack (specExternalVars jsonFormat))- jfi7 <- showErrors $ parseJSONPath (pack (specExternalVarId jsonFormat))- jfi8 <- showErrors $ parseJSONPath (pack (specExternalVarType jsonFormat))- jfi9 <- showErrors $ parseJSONPath (pack (specRequirements jsonFormat))- jfi10 <- showErrors $ parseJSONPath (pack (specRequirementId jsonFormat))- jfi11 <- showErrors $ parseJSONPath (pack (specRequirementDesc jsonFormat))- jfi12 <- showErrors $ parseJSONPath (pack (specRequirementExpr jsonFormat))+ jfi2 <- showErrorsM $ fmap (parseJSONPath . pack) $ specInternalVars jsonFormat+ jfi3 <- showErrors $ parseJSONPath $ pack $ specInternalVarId jsonFormat+ jfi4 <- showErrors $ parseJSONPath $ pack $ specInternalVarExpr jsonFormat+ jfi5 <- showErrorsM $ fmap (parseJSONPath . pack) $ specInternalVarType jsonFormat+ jfi6 <- showErrorsM $ fmap (parseJSONPath . pack) $ specExternalVars jsonFormat+ jfi7 <- showErrors $ parseJSONPath $ pack $ specExternalVarId jsonFormat+ jfi8 <- showErrorsM $ fmap (parseJSONPath . pack) $ specExternalVarType jsonFormat+ jfi9 <- showErrors $ parseJSONPath $ pack $ specRequirements jsonFormat+ jfi10 <- showErrors $ parseJSONPath $ pack $ specRequirementId jsonFormat+ jfi11 <- showErrorsM $ fmap (parseJSONPath . pack) $ specRequirementDesc jsonFormat+ jfi12 <- showErrors $ parseJSONPath $ pack $ specRequirementExpr jsonFormat return $ JSONFormatInternal { jfiInternalVars = jfi2 , jfiInternalVarId = jfi3@@ -111,7 +111,7 @@ jsonFormatInternal <- parseJSONFormat jsonFormat let values :: [Value]- values = executeJSONPath (jfiInternalVars jsonFormatInternal) value+ values = maybe [] (`executeJSONPath` value) (jfiInternalVars jsonFormatInternal) internalVarDef :: Value -> Either String InternalVariableDef internalVarDef value = do@@ -119,7 +119,7 @@ varId <- valueToString msg =<< (listToEither msg (executeJSONPath (jfiInternalVarId jsonFormatInternal) value)) let msg = "internal variable type"- varType <- valueToString msg =<< (listToEither msg (executeJSONPath (jfiInternalVarType jsonFormatInternal) value))+ varType <- maybe (Right "") (\e -> valueToString msg =<< (listToEither msg (executeJSONPath e value))) (jfiInternalVarType jsonFormatInternal) let msg = "internal variable expr" varExpr <- valueToString msg =<< (listToEither msg (executeJSONPath (jfiInternalVarExpr jsonFormatInternal) value))@@ -133,7 +133,7 @@ internalVariableDefs <- mapM internalVarDef values let values :: [Value]- values = executeJSONPath (jfiExternalVars jsonFormatInternal) value+ values = maybe [] (`executeJSONPath` value) (jfiExternalVars jsonFormatInternal) externalVarDef :: Value -> Either String ExternalVariableDef externalVarDef value = do@@ -142,7 +142,7 @@ varId <- valueToString msg =<< (listToEither msg (executeJSONPath (jfiExternalVarId jsonFormatInternal) value)) let msg = "external variable type"- varType <- valueToString msg =<< (listToEither msg (executeJSONPath (jfiExternalVarType jsonFormatInternal) value))+ varType <- maybe (Right "") (\e -> valueToString msg =<< (listToEither msg (executeJSONPath e value))) (jfiExternalVarType jsonFormatInternal) return $ ExternalVariableDef { externalVariableName = varId@@ -164,7 +164,7 @@ reqExpr' <- parseExpr reqExpr let msg = "Requirement description"- reqDesc <- valueToString msg =<< (listToEither msg (executeJSONPath (jfiRequirementDesc jsonFormatInternal) value))+ reqDesc <- maybe (Right "") (\e -> valueToString msg =<< (listToEither msg (executeJSONPath e value))) (jfiRequirementDesc jsonFormatInternal) return $ Requirement { requirementName = reqId@@ -192,3 +192,8 @@ showErrors :: Show a => Either a b -> Either String b showErrors (Left s) = Left (show s) showErrors (Right x) = Right x++showErrorsM :: Show a => Maybe (Either a b) -> Either String (Maybe b)+showErrorsM Nothing = Right Nothing+showErrorsM (Just (Left s)) = Left (show s)+showErrorsM (Just (Right x)) = Right (Just x)