{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StrictData #-}
module GitLab.API.MergeRequests
(
mergeRequests,
mergeRequestsWith,
mergeRequest,
createMergeRequest,
acceptMergeRequest,
deleteMergeRequest,
mrAttrs,
MergeProjectAttrs (..),
MergeRequestState (..),
WIP (..),
)
where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.Either
import Data.Maybe
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Data.Time.Clock
import Data.Time.Format.ISO8601
import GitLab.Types
import GitLab.WebRequests.GitLabWebCalls
import Network.HTTP.Client
mergeRequest ::
Project ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe MergeRequest))
mergeRequest :: Project
-> Int
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
mergeRequest Project
project =
Int
-> Int
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
mergeRequest' (Project -> Int
project_id Project
project)
mergeRequest' ::
Int ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe MergeRequest))
mergeRequest' :: Int
-> Int
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
mergeRequest' Int
projectId Int
mergeRequestIID =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabGetOne Text
addr []
where
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
projectId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/merge_requests/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
mergeRequestIID)
mergeRequests ::
Project ->
GitLab [MergeRequest]
mergeRequests :: Project -> GitLab [MergeRequest]
mergeRequests Project
p = do
Either (Response ByteString) [MergeRequest]
result <- Int -> GitLab (Either (Response ByteString) [MergeRequest])
mergeRequests' (Project -> Int
project_id Project
p)
[MergeRequest] -> GitLab [MergeRequest]
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([MergeRequest]
-> Either (Response ByteString) [MergeRequest] -> [MergeRequest]
forall b a. b -> Either a b -> b
fromRight (String -> [MergeRequest]
forall a. HasCallStack => String -> a
error String
"mergeRequests error") Either (Response ByteString) [MergeRequest]
result)
mergeRequests' ::
Int ->
GitLab (Either (Response BSL.ByteString) [MergeRequest])
mergeRequests' :: Int -> GitLab (Either (Response ByteString) [MergeRequest])
mergeRequests' Int
projectId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) [MergeRequest])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
addr [(ByteString
"scope", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just ByteString
"all")]
where
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
projectId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/merge_requests"
mergeRequestsWith ::
Project ->
MergeProjectAttrs ->
GitLab [MergeRequest]
mergeRequestsWith :: Project -> MergeProjectAttrs -> GitLab [MergeRequest]
mergeRequestsWith Project
p MergeProjectAttrs
attrs = do
Either (Response ByteString) [MergeRequest]
result <- Int
-> MergeProjectAttrs
-> GitLab (Either (Response ByteString) [MergeRequest])
mergeRequestsWith' (Project -> Int
project_id Project
p) MergeProjectAttrs
attrs
[MergeRequest] -> GitLab [MergeRequest]
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([MergeRequest]
-> Either (Response ByteString) [MergeRequest] -> [MergeRequest]
forall b a. b -> Either a b -> b
fromRight (String -> [MergeRequest]
forall a. HasCallStack => String -> a
error String
"mergeRequests error") Either (Response ByteString) [MergeRequest]
result)
mergeRequestsWith' ::
Int ->
MergeProjectAttrs ->
GitLab (Either (Response BSL.ByteString) [MergeRequest])
mergeRequestsWith' :: Int
-> MergeProjectAttrs
-> GitLab (Either (Response ByteString) [MergeRequest])
mergeRequestsWith' Int
projectId MergeProjectAttrs
attrs =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) [MergeRequest])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
addr (MergeProjectAttrs -> [GitLabParam]
mrAttrsParams MergeProjectAttrs
attrs)
where
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
projectId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/merge_requests"
createMergeRequest ::
Project ->
Text ->
Text ->
Int ->
Text ->
Text ->
GitLab (Either (Response BSL.ByteString) (Maybe MergeRequest))
createMergeRequest :: Project
-> Text
-> Text
-> Int
-> Text
-> Text
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
createMergeRequest Project
project =
Int
-> Text
-> Text
-> Int
-> Text
-> Text
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
createMergeRequest' (Project -> Int
project_id Project
project)
createMergeRequest' ::
Int ->
Text ->
Text ->
Int ->
Text ->
Text ->
GitLab (Either (Response BSL.ByteString) (Maybe MergeRequest))
createMergeRequest' :: Int
-> Text
-> Text
-> Int
-> Text
-> Text
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
createMergeRequest' Int
projectId Text
sourceBranch Text
targetBranch Int
targetProjectId Text
mrTitle Text
mrDescription =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
params
where
params :: [GitLabParam]
params :: [GitLabParam]
params =
[ (ByteString
"source_branch", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 Text
sourceBranch)),
(ByteString
"target_branch", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 Text
targetBranch)),
(ByteString
"target_project_id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
targetProjectId)))),
(ByteString
"title", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 Text
mrTitle)),
(ByteString
"description", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 Text
mrDescription))
]
addr :: Text
addr = String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ String
"/projects/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
projectId String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/merge_requests"
acceptMergeRequest ::
Project ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe MergeRequest))
acceptMergeRequest :: Project
-> Int
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
acceptMergeRequest Project
project =
Int
-> Int
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
acceptMergeRequest' (Project -> Int
project_id Project
project)
acceptMergeRequest' ::
Int ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe MergeRequest))
acceptMergeRequest' :: Int
-> Int
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
acceptMergeRequest' Int
projectId Int
mergeRequestIid = Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe MergeRequest))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
params
where
params :: [GitLabParam]
params :: [GitLabParam]
params =
[ (ByteString
"id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
projectId)))),
(ByteString
"merge_request_iid", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
mergeRequestIid))))
]
addr :: Text
addr =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
projectId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/merge_requests/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
mergeRequestIid
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/merge"
deleteMergeRequest ::
Project ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe ()))
deleteMergeRequest :: Project -> Int -> GitLab (Either (Response ByteString) (Maybe ()))
deleteMergeRequest Project
project =
Int -> Int -> GitLab (Either (Response ByteString) (Maybe ()))
deleteMergeRequest' (Project -> Int
project_id Project
project)
deleteMergeRequest' ::
Int ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe ()))
deleteMergeRequest' :: Int -> Int -> GitLab (Either (Response ByteString) (Maybe ()))
deleteMergeRequest' Int
projectId Int
mergeRequestIid = Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe ()))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabDelete Text
addr []
where
addr :: Text
addr =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
projectId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/merge_requests/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
mergeRequestIid
data MergeProjectAttrs = MergeProjectAttrs
{
MergeProjectAttrs -> Maybe MergeRequestState
mr_attr_state :: Maybe MergeRequestState,
MergeProjectAttrs -> Maybe OrderBy
mr_attr_order_by :: Maybe OrderBy,
MergeProjectAttrs -> Maybe SortBy
mr_attr_sort :: Maybe SortBy,
MergeProjectAttrs -> Maybe Milestone
mr_attr_milestone :: Maybe Milestone,
MergeProjectAttrs -> Maybe Text
mr_attr_labels :: Maybe Text,
MergeProjectAttrs -> Maybe Bool
mr_attr_with_labels_details :: Maybe Bool,
MergeProjectAttrs -> Maybe Bool
mr_attr_with_merge_status_recheck :: Maybe Bool,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_created_after :: Maybe UTCTime,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_created_before :: Maybe UTCTime,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_updated_after :: Maybe UTCTime,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_updated_before :: Maybe UTCTime,
MergeProjectAttrs -> Maybe Scope
mr_attr_scope :: Maybe Scope,
MergeProjectAttrs -> Maybe Int
mr_attr_author_id :: Maybe Int,
MergeProjectAttrs -> Maybe Text
mr_attr_author_username :: Maybe Text,
MergeProjectAttrs -> Maybe Int
mr_attr_assignee_id :: Maybe Int,
MergeProjectAttrs -> Maybe [Int]
mr_attr_approver_ids :: Maybe [Int],
MergeProjectAttrs -> Maybe [Int]
mr_attr_approved_by_ids :: Maybe [Int],
MergeProjectAttrs -> Maybe Int
mr_attr_reviewer_id :: Maybe Int,
MergeProjectAttrs -> Maybe Text
mr_attr_reviewer_username :: Maybe Text,
MergeProjectAttrs -> Maybe Text
mr_attr_my_reaction_emoji :: Maybe Text,
MergeProjectAttrs -> Maybe Text
mr_attr_source_branch :: Maybe Text,
MergeProjectAttrs -> Maybe Text
mr_attr_target_branch :: Maybe Text,
MergeProjectAttrs -> Maybe Text
mr_attr_search :: Maybe Text,
MergeProjectAttrs -> Maybe SearchIn
mr_attr_in :: Maybe SearchIn,
MergeProjectAttrs -> Maybe WIP
mr_attr_wip :: Maybe WIP,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_environment :: Maybe UTCTime,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_deployed_before :: Maybe UTCTime,
MergeProjectAttrs -> Maybe UTCTime
mr_attr_deployed_after :: Maybe UTCTime
}
data MergeRequestState
=
MROpened
|
MRClosed
|
MRLocked
|
MRMerged
instance Show MergeRequestState where
show :: MergeRequestState -> String
show MergeRequestState
MROpened = String
"opened"
show MergeRequestState
MRClosed = String
"closed"
show MergeRequestState
MRLocked = String
"locked"
show MergeRequestState
MRMerged = String
"merged"
data WIP
=
WIPYes
|
WIPNo
instance Show WIP where
show :: WIP -> String
show WIP
WIPYes = String
"yes"
show WIP
WIPNo = String
"no"
mrAttrs :: MergeProjectAttrs
mrAttrs :: MergeProjectAttrs
mrAttrs =
Maybe MergeRequestState
-> Maybe OrderBy
-> Maybe SortBy
-> Maybe Milestone
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe Scope
-> Maybe Int
-> Maybe Text
-> Maybe Int
-> Maybe [Int]
-> Maybe [Int]
-> Maybe Int
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe SearchIn
-> Maybe WIP
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe UTCTime
-> MergeProjectAttrs
MergeProjectAttrs Maybe MergeRequestState
forall a. Maybe a
Nothing Maybe OrderBy
forall a. Maybe a
Nothing Maybe SortBy
forall a. Maybe a
Nothing Maybe Milestone
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe Scope
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe [Int]
forall a. Maybe a
Nothing Maybe [Int]
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe SearchIn
forall a. Maybe a
Nothing Maybe WIP
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing
mrAttrsParams :: MergeProjectAttrs -> [GitLabParam]
mrAttrsParams :: MergeProjectAttrs -> [GitLabParam]
mrAttrsParams MergeProjectAttrs
attrs =
[Maybe GitLabParam] -> [GitLabParam]
forall a. [Maybe a] -> [a]
catMaybes
[ (\MergeRequestState
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"state", MergeRequestState -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr MergeRequestState
x)) (MergeRequestState -> Maybe GitLabParam)
-> Maybe MergeRequestState -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe MergeRequestState
mr_attr_state MergeProjectAttrs
attrs,
(\OrderBy
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"order_by", OrderBy -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr OrderBy
x)) (OrderBy -> Maybe GitLabParam)
-> Maybe OrderBy -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe OrderBy
mr_attr_order_by MergeProjectAttrs
attrs,
(\SortBy
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"sort", SortBy -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr SortBy
x)) (SortBy -> Maybe GitLabParam) -> Maybe SortBy -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe SortBy
mr_attr_sort MergeProjectAttrs
attrs,
(\Milestone
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"milestone", Milestone -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr Milestone
x)) (Milestone -> Maybe GitLabParam)
-> Maybe Milestone -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Milestone
mr_attr_milestone MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"labels", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_labels MergeProjectAttrs
attrs,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"with_labels_details", Bool -> Maybe ByteString
showBool Bool
b)) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Bool
mr_attr_with_labels_details MergeProjectAttrs
attrs,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"with_merge_status_recheck", Bool -> Maybe ByteString
showBool Bool
b)) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Bool
mr_attr_with_merge_status_recheck MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"created_after", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_created_after MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"created_before", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_created_before MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"updated_after", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_updated_after MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"updated_before", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_updated_before MergeProjectAttrs
attrs,
(\Scope
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"scope", Scope -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr Scope
x)) (Scope -> Maybe GitLabParam) -> Maybe Scope -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Scope
mr_attr_scope MergeProjectAttrs
attrs,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"author_id", Int -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr Int
i)) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Int
mr_attr_author_id MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"author_username", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_author_username MergeProjectAttrs
attrs,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"assignee_id", Int -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr Int
i)) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Int
mr_attr_assignee_id MergeProjectAttrs
attrs,
(\[Int]
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"approver_ids", [Int] -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr [Int]
i)) ([Int] -> Maybe GitLabParam) -> Maybe [Int] -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe [Int]
mr_attr_approver_ids MergeProjectAttrs
attrs,
(\[Int]
is -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"approved_by_ids", [Int] -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr [Int]
is)) ([Int] -> Maybe GitLabParam) -> Maybe [Int] -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe [Int]
mr_attr_approved_by_ids MergeProjectAttrs
attrs,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"reviewer_id", Int -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr Int
i)) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Int
mr_attr_reviewer_id MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"reviewer_username", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_reviewer_username MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"my_reaction_emoji", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_my_reaction_emoji MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"source_branch", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_source_branch MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"target_branch", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_target_branch MergeProjectAttrs
attrs,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"search", Text -> Maybe ByteString
showAttrT Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe Text
mr_attr_search MergeProjectAttrs
attrs,
(\SearchIn
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"in", SearchIn -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr SearchIn
x)) (SearchIn -> Maybe GitLabParam)
-> Maybe SearchIn -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe SearchIn
mr_attr_in MergeProjectAttrs
attrs,
(\WIP
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"wip", WIP -> Maybe ByteString
forall a. Show a => a -> Maybe ByteString
showAttr WIP
x)) (WIP -> Maybe GitLabParam) -> Maybe WIP -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe WIP
mr_attr_wip MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"environment", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_environment MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"deployed_before", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_deployed_before MergeProjectAttrs
attrs,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"deployed_after", UTCTime -> Maybe ByteString
showTime UTCTime
t)) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MergeProjectAttrs -> Maybe UTCTime
mr_attr_deployed_after MergeProjectAttrs
attrs
]
where
showAttr :: (Show a) => a -> Maybe BS.ByteString
showAttr :: forall a. Show a => a -> Maybe ByteString
showAttr = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (a -> ByteString) -> a -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8 (Text -> ByteString) -> (a -> Text) -> a -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (a -> String) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show
showAttrT :: Text -> Maybe ByteString
showAttrT = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Text -> ByteString) -> Text -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8
showBool :: Bool -> Maybe BS.ByteString
showBool :: Bool -> Maybe ByteString
showBool Bool
True = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack String
"true"))
showBool Bool
False = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack String
"false"))
showTime :: UTCTime -> Maybe BS.ByteString
showTime :: UTCTime -> Maybe ByteString
showTime = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (UTCTime -> ByteString) -> UTCTime -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8 (Text -> ByteString) -> (UTCTime -> Text) -> UTCTime -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (UTCTime -> String) -> UTCTime -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> String
forall t. ISO8601 t => t -> String
iso8601Show