@@ -0,0 +1,173 @@
1+module GitHub.Data.Checks
7+ CheckAnnotationLevel (..),
14+import Data.Aeson.Types
15+import Data.Text (Text)
16+import Data.Vector (Vector)
17+import GHC.Generics (Generic)
19+import GitHub.Internal.Prelude (UTCTime)
22+ { checkName :: !(Name Check)
23+ , checkSha :: !(Name Commit)
24+ , checkDetailsURL :: !(Maybe URL)
25+ , checkExternalId :: !(Maybe (Id Check))
26+ , checkStatus :: !(Maybe CheckStatus)
27+ , checkStartedAt :: !(Maybe UTCTime)
28+ , checkConclusion :: !(Maybe CheckConclusion)
29+ , checkCompletedAt :: !(Maybe UTCTime)
30+ , checkOutput :: !(Maybe CheckOutput)
31+ , checkActions :: !(Maybe (Vector CheckAction))
33+ deriving stock (Show, Eq, Ord, Generic)
35+instance ToJSON Check where
36+ toJSON (Check n sha durl eid s sa c ca o a) =
40+ , "details_url" .= durl
41+ , "external_id" .= eid
45+ , "completed_at" .= ca
54+ deriving stock (Show, Enum, Bounded, Eq, Ord, Generic)
56+instance ToJSON CheckStatus where
57+ toJSON CheckQueued = String "queued"
58+ toJSON CheckInProgress = String "in_progress"
59+ toJSON CheckCompleted = String "completed"
62+ = CheckActionRequired
70+ deriving stock (Show, Enum, Bounded, Eq, Ord, Generic)
72+instance ToJSON CheckConclusion where
73+ toJSON CheckActionRequired = String "action_required"
74+ toJSON CheckCancelled = String "cancelled"
75+ toJSON CheckFailure = String "failure"
76+ toJSON CheckNeutral = String "neutral"
77+ toJSON CheckSuccess = String "success"
78+ toJSON CheckSkipped = String "skipped"
79+ toJSON CheckStale = String "stale"
80+ toJSON CheckTimedOut = String "timed_out"
82+data CheckOutput = CheckOutput
83+ { checkTitle :: !Text
84+ , checkSummary :: !Text
85+ , checkText :: !(Maybe Text)
86+ , checkAnnotations :: !(Maybe (Vector CheckAnnotation))
87+ , checkImages :: !(Maybe (Vector CheckImage))
89+ deriving stock (Show, Eq, Ord, Generic)
91+instance ToJSON CheckOutput where
92+ toJSON (CheckOutput t s txt a i) =
101+data CheckAnnotation = CheckAnnotation
102+ { checkPath :: !Text
103+ , checkStartLine :: !Int
104+ , checkEndLine :: !Int
105+ , checkStartColumn :: !(Maybe Int)
106+ , checkEndColumn :: !(Maybe Int)
107+ , checkAnnotationLevel :: !CheckAnnotationLevel
108+ , checkMessage :: !Text
109+ , checkTitle :: !(Maybe Text)
110+ , checkRawDetails :: !(Maybe Text)
112+ deriving stock (Show, Eq, Ord, Generic)
114+instance ToJSON CheckAnnotation where
115+ toJSON (CheckAnnotation p sl el sc ec al m t rd) =
118+ , "start_line" .= sl
120+ , "start_column" .= sc
121+ , "end_column" .= ec
122+ , "annotation_level" .= al
125+ , "raw_details" .= rd
128+data CheckAnnotationLevel
132+ deriving stock (Show, Enum, Bounded, Eq, Ord, Generic)
134+instance ToJSON CheckAnnotationLevel where
135+ toJSON NoticeAnnotation = String "notice"
136+ toJSON WarningAnnotation = String "warning"
137+ toJSON FailureAnnotation = String "failure"
139+data CheckImage = CheckImage
140+ { checkImageAlt :: !Text
141+ , checkImageURL :: !URL
142+ , checkImageCaption :: !(Maybe Text)
144+ deriving stock (Show, Eq, Ord, Generic)
146+instance ToJSON CheckImage where
147+ toJSON (CheckImage a url c) =
150+ , "image_url" .= url
154+data CheckAction = CheckAction
155+ { checkActionLabel :: !Text
156+ , checkActionDescription :: !Text
157+ , checkActionIdentifier :: !Text
159+ deriving stock (Show, Eq, Ord, Generic)
161+instance ToJSON CheckAction where
162+ toJSON (CheckAction l d i) =
165+ , "description" .= d
169+object' :: [Pair] -> Value
170+object' = object . filter notNull
172+ notNull (_, Null) = False
173+ notNull (_, _) = True