sarif-0.2: src/Data/SARIF/ReportingDescriptorRelationship.hs
--------------------------------------------------------------------------------
-- SARIF implementation for Haskell
--------------------------------------------------------------------------------
-- This source code is licensed under the MIT license found in the LICENSE --
-- file in the root directory of this source tree. --
--------------------------------------------------------------------------------
-- | Provides the `ReportingDescriptorRelationship` type to represent SARIF artifacts.
module Data.SARIF.ReportingDescriptorRelationship where
import Data.Aeson.Optional
import Data.Map.Strict
import Data.SARIF.Message
import Data.SARIF.ReportingDescriptorReference
import Data.Text
data ReportingDescriptorRelationshipKind
= ReportingDescriptorRelationshipEqualKind
| ReportingDescriptorRelationshipSupersetKind
| ReportingDescriptorRelationshipSubsetKind
| ReportingDescriptorRelationshipDisjointKind
| ReportingDescriptorRelationshipIncomparableKind
| ReportingDescriptorRelationshipCanFollowKind
| ReportingDescriptorRelationshipCanPrecedeKind
| ReportingDescriptorRelationshipWillFollowKind
| ReportingDescriptorRelationshipWillPrecedeKind
| ReportingDescriptorRelationshipRelevantKind
| ReportingDescriptorRelationshipCustomKind Text
deriving (Eq, Ord, Show)
instance ToJSON ReportingDescriptorRelationshipKind where
toJSON ReportingDescriptorRelationshipEqualKind = String "equal"
toJSON ReportingDescriptorRelationshipSupersetKind = String "superset"
toJSON ReportingDescriptorRelationshipSubsetKind = String "subset"
toJSON ReportingDescriptorRelationshipDisjointKind = String "disjoint"
toJSON ReportingDescriptorRelationshipIncomparableKind = String "incomparable"
toJSON ReportingDescriptorRelationshipCanFollowKind = String "canFollow"
toJSON ReportingDescriptorRelationshipCanPrecedeKind = String "canPrecede"
toJSON ReportingDescriptorRelationshipWillFollowKind = String "willFollow"
toJSON ReportingDescriptorRelationshipWillPrecedeKind = String "willPrecede"
toJSON ReportingDescriptorRelationshipRelevantKind = String "relevant"
toJSON (ReportingDescriptorRelationshipCustomKind t) = String t
instance FromJSON ReportingDescriptorRelationshipKind where
parseJSON = withText "ReportingDescriptorRelationshipKind" $ \t ->
case t of
"equal" -> pure ReportingDescriptorRelationshipEqualKind
"superset" -> pure ReportingDescriptorRelationshipSupersetKind
"subset" -> pure ReportingDescriptorRelationshipSubsetKind
"disjoint" -> pure ReportingDescriptorRelationshipDisjointKind
"incomparable" -> pure ReportingDescriptorRelationshipIncomparableKind
"canFollow" -> pure ReportingDescriptorRelationshipCanFollowKind
"canPrecede" -> pure ReportingDescriptorRelationshipCanPrecedeKind
"willFollow" -> pure ReportingDescriptorRelationshipWillFollowKind
"willPrecede" -> pure ReportingDescriptorRelationshipWillPrecedeKind
"relevant" -> pure ReportingDescriptorRelationshipRelevantKind
_ -> pure (ReportingDescriptorRelationshipCustomKind t)
data ReportingDescriptorRelationship
= MkReportingDescriptorRelationship
{ -- | The target property of the reporting descriptor relationship
reportingDescriptorRelationshipTarget :: ReportingDescriptorReference
-- | The kinds property of the reporting descriptor relationship
, reportingDescriptorRelationshipKinds :: [ReportingDescriptorRelationshipKind]
-- | The description property of the reporting descriptor relationship
, reportingDescriptorRelationshipDescription :: Maybe Message
-- | The properties property of the ReportingDescriptorRelationship object
, reportingDescriptorRelationshipProperties :: Maybe (Map Text Value)
}
deriving (Eq, Ord, Show)
instance ToJSON ReportingDescriptorRelationship where
toJSON MkReportingDescriptorRelationship {..} =
object
[ "target" .= reportingDescriptorRelationshipTarget,
"kinds" .= reportingDescriptorRelationshipKinds,
"description" .=? reportingDescriptorRelationshipDescription,
"properties" .=? reportingDescriptorRelationshipProperties
]
instance FromJSON ReportingDescriptorRelationship where
parseJSON = withObject "ReportingDescriptorRelationship" $ \obj ->
MkReportingDescriptorRelationship
<$> obj .: "target"
<*> obj .: "kinds"
<*> obj .:? "description"
<*> obj .:? "properties"