packages feed

sarif-0.2: src/Data/SARIF/Region.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 `Region` type to represent SARIF artifacts.
module Data.SARIF.Region
  ( Region (..),
  )
where

--------------------------------------------------------------------------------

import Data.Aeson.Optional
import Data.Map.Strict
import Data.SARIF.ArtifactContent
import Data.SARIF.Message
import Data.Text

data Region
  = MkRegion
      { -- | The startLine property of a region object
        regionStartLine :: Maybe Int
        -- | The startColumn property of a region object
      , regionStartColumn :: Maybe Int
        -- | The endLine property of a region object
      , regionEndLine :: Maybe Int
        -- | The endColumn property of a region object
      , regionEndColumn :: Maybe Int
        -- | The charOffset property of a region object
      , regionCharOffset :: Maybe Int
        -- | The charLength property of a region object
      , regionCharLength :: Maybe Int
        -- | The byteOffset property of a region object
      , regionByteOffset :: Maybe Int
        -- | The byteLength property of a region object
      , regionByteLength :: Maybe Int
        -- | The snippet property of a region object
      , regionSnippet :: Maybe ArtifactContent
        -- | The message property of a region object
      , regionMessage :: Maybe Message
        -- | The sourceLanguage property of a region object
      , regionSourceLanguage :: Maybe Text
        -- | The properties property of the Region object
      , regionProperties :: Maybe (Map Text Value)
      }
  deriving (Eq, Ord, Show)

instance ToJSON Region where
  toJSON MkRegion {..} =
    object
      [ "startLine" .=? regionStartLine,
        "startColumn" .=? regionStartColumn,
        "endLine" .=? regionEndLine,
        "endColumn" .=? regionEndColumn,
        "charOffset" .=? regionCharOffset,
        "charLength" .=? regionCharLength,
        "byteOffset" .=? regionByteOffset,
        "byteLength" .=? regionByteLength,
        "snippet" .=? regionSnippet,
        "message" .=? regionMessage,
        "sourceLanguage" .=? regionSourceLanguage,
        "properties" .=? regionProperties
      ]

instance FromJSON Region where
  parseJSON = withObject "Region" $ \obj ->
    MkRegion
      <$> obj .:? "startLine"
      <*> obj .:? "startColumn"
      <*> obj .:? "endLine"
      <*> obj .:? "endColumn"
      <*> obj .:? "charOffset"
      <*> obj .:? "charLength"
      <*> obj .:? "byteOffset"
      <*> obj .:? "byteLength"
      <*> obj .:? "snippet"
      <*> obj .:? "message"
      <*> obj .:? "sourceLanguage"
      <*> obj .:? "properties"