-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The API for dealing with labels on Github issues as described on
-- <http://developer.github.com/v3/issues/labels/>.
module GitHub.Endpoints.Issues.Labels (
    labelsOnRepo,
    labelsOnRepo',
    labelsOnRepoR,
    label,
    label',
    labelR,
    createLabel,
    createLabelR,
    updateLabel,
    updateLabelR,
    deleteLabel,
    deleteLabelR,
    labelsOnIssue,
    labelsOnIssue',
    labelsOnIssueR,
    addLabelsToIssue,
    addLabelsToIssueR,
    removeLabelFromIssue,
    removeLabelFromIssueR,
    replaceAllLabelsForIssue,
    replaceAllLabelsForIssueR,
    removeAllLabelsFromIssue,
    removeAllLabelsFromIssueR,
    labelsOnMilestone,
    labelsOnMilestone',
    labelsOnMilestoneR,
    module GitHub.Data,
    ) where

import GitHub.Data
import GitHub.Internal.Prelude
import GitHub.Request
import Prelude ()

-- | All the labels available to use on any issue in the repo.
--
-- > labelsOnRepo "thoughtbot" "paperclip"
labelsOnRepo :: Name Owner -> Name Repo -> IO (Either Error (Vector IssueLabel))
labelsOnRepo :: Name Owner -> Name Repo -> IO (Either Error (Vector IssueLabel))
labelsOnRepo = Maybe Auth
-> Name Owner -> Name Repo -> IO (Either Error (Vector IssueLabel))
labelsOnRepo' Maybe Auth
forall a. Maybe a
Nothing

-- | All the labels available to use on any issue in the repo using authentication.
--
-- > labelsOnRepo' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip"
labelsOnRepo' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector IssueLabel))
labelsOnRepo' :: Maybe Auth
-> Name Owner -> Name Repo -> IO (Either Error (Vector IssueLabel))
labelsOnRepo' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO (Vector IssueLabel)
 -> IO (Either Error (Vector IssueLabel)))
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
forall (k :: RW).
Name Owner
-> Name Repo -> FetchCount -> Request k (Vector IssueLabel)
labelsOnRepoR Name Owner
user Name Repo
repo FetchCount
FetchAll

-- | List all labels for this repository.
-- See <https://developer.github.com/v3/issues/labels/#list-all-labels-for-this-repository>
labelsOnRepoR :: Name Owner -> Name Repo -> FetchCount -> Request k (Vector IssueLabel)
labelsOnRepoR :: Name Owner
-> Name Repo -> FetchCount -> Request k (Vector IssueLabel)
labelsOnRepoR user :: Name Owner
user repo :: Name Repo
repo =
    Paths -> QueryString -> FetchCount -> Request k (Vector IssueLabel)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "labels"] []

-- | A label by name.
--
-- > label "thoughtbot" "paperclip" "bug"
label :: Name Owner -> Name Repo -> Name IssueLabel -> IO (Either Error IssueLabel)
label :: Name Owner
-> Name Repo -> Name IssueLabel -> IO (Either Error IssueLabel)
label = Maybe Auth
-> Name Owner
-> Name Repo
-> Name IssueLabel
-> IO (Either Error IssueLabel)
label' Maybe Auth
forall a. Maybe a
Nothing

-- | A label by name using authentication.
--
-- > label' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug"
label' :: Maybe Auth -> Name Owner -> Name Repo -> Name IssueLabel -> IO (Either Error IssueLabel)
label' :: Maybe Auth
-> Name Owner
-> Name Repo
-> Name IssueLabel
-> IO (Either Error IssueLabel)
label' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo lbl :: Name IssueLabel
lbl =
    Maybe Auth
-> GenRequest 'MtJSON 'RO IssueLabel
-> IO (Either Error IssueLabel)
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO IssueLabel -> IO (Either Error IssueLabel))
-> GenRequest 'MtJSON 'RO IssueLabel
-> IO (Either Error IssueLabel)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Name IssueLabel
-> GenRequest 'MtJSON 'RO IssueLabel
forall (k :: RW).
Name Owner -> Name Repo -> Name IssueLabel -> Request k IssueLabel
labelR Name Owner
user Name Repo
repo Name IssueLabel
lbl

-- | Query a single label.
-- See <https://developer.github.com/v3/issues/labels/#get-a-single-label>
labelR :: Name Owner -> Name Repo -> Name IssueLabel -> Request k IssueLabel
labelR :: Name Owner -> Name Repo -> Name IssueLabel -> Request k IssueLabel
labelR user :: Name Owner
user repo :: Name Repo
repo lbl :: Name IssueLabel
lbl =
    Paths -> QueryString -> Request k IssueLabel
forall (mt :: RW) a. Paths -> QueryString -> Request mt a
query ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "labels", Name IssueLabel -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name IssueLabel
lbl] []

-- | Create a label
--
-- > createLabel (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug" "f29513"
createLabel :: Auth -> Name Owner -> Name Repo -> Name IssueLabel -> String -> IO (Either Error IssueLabel)
createLabel :: Auth
-> Name Owner
-> Name Repo
-> Name IssueLabel
-> String
-> IO (Either Error IssueLabel)
createLabel auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo lbl :: Name IssueLabel
lbl color :: String
color =
    Auth
-> GenRequest 'MtJSON 'RW IssueLabel
-> IO (Either Error IssueLabel)
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtJSON 'RW IssueLabel -> IO (Either Error IssueLabel))
-> GenRequest 'MtJSON 'RW IssueLabel
-> IO (Either Error IssueLabel)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Name IssueLabel
-> String
-> GenRequest 'MtJSON 'RW IssueLabel
createLabelR Name Owner
user Name Repo
repo Name IssueLabel
lbl String
color

-- | Create a label.
-- See <https://developer.github.com/v3/issues/labels/#create-a-label>
createLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> String -> Request 'RW IssueLabel
createLabelR :: Name Owner
-> Name Repo
-> Name IssueLabel
-> String
-> GenRequest 'MtJSON 'RW IssueLabel
createLabelR user :: Name Owner
user repo :: Name Repo
repo lbl :: Name IssueLabel
lbl color :: String
color =
    CommandMethod
-> Paths -> ByteString -> GenRequest 'MtJSON 'RW IssueLabel
forall a. CommandMethod -> Paths -> ByteString -> Request 'RW a
command CommandMethod
Post Paths
paths (ByteString -> GenRequest 'MtJSON 'RW IssueLabel)
-> ByteString -> GenRequest 'MtJSON 'RW IssueLabel
forall a b. (a -> b) -> a -> b
$ Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode Value
body
  where
    paths :: Paths
paths = ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "labels"]
    body :: Value
body = [Pair] -> Value
object ["name" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= Name IssueLabel -> Text
forall entity. Name entity -> Text
untagName Name IssueLabel
lbl, "color" Text -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= String
color]

-- | Update a label
--
-- > updateLabel (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug" "new-bug" "ff1111"
updateLabel :: Auth
            -> Name Owner
            -> Name Repo
            -> Name IssueLabel   -- ^ old label name
            -> Name IssueLabel   -- ^ new label name
            -> String            -- ^ new color
            -> IO (Either Error IssueLabel)
updateLabel :: Auth
-> Name Owner
-> Name Repo
-> Name IssueLabel
-> Name IssueLabel
-> String
-> IO (Either Error IssueLabel)
updateLabel auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo oldLbl :: Name IssueLabel
oldLbl newLbl :: Name IssueLabel
newLbl color :: String
color =
    Auth
-> GenRequest 'MtJSON 'RW IssueLabel
-> IO (Either Error IssueLabel)
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtJSON 'RW IssueLabel -> IO (Either Error IssueLabel))
-> GenRequest 'MtJSON 'RW IssueLabel
-> IO (Either Error IssueLabel)
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Name IssueLabel
-> Name IssueLabel
-> String
-> GenRequest 'MtJSON 'RW IssueLabel
updateLabelR Name Owner
user Name Repo
repo Name IssueLabel
oldLbl Name IssueLabel
newLbl String
color

-- | Update a label.
-- See <https://developer.github.com/v3/issues/labels/#update-a-label>
updateLabelR :: Name Owner
             -> Name Repo
             -> Name IssueLabel   -- ^ old label name
             -> Name IssueLabel   -- ^ new label name
             -> String            -- ^ new color
             -> Request 'RW IssueLabel
updateLabelR :: Name Owner
-> Name Repo
-> Name IssueLabel
-> Name IssueLabel
-> String
-> GenRequest 'MtJSON 'RW IssueLabel
updateLabelR user :: Name Owner
user repo :: Name Repo
repo oldLbl :: Name IssueLabel
oldLbl newLbl :: Name IssueLabel
newLbl color :: String
color =
    CommandMethod
-> Paths -> ByteString -> GenRequest 'MtJSON 'RW IssueLabel
forall a. CommandMethod -> Paths -> ByteString -> Request 'RW a
command CommandMethod
Patch Paths
paths (Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode Value
body)
  where
    paths :: Paths
paths = ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "labels", Name IssueLabel -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name IssueLabel
oldLbl]
    body :: Value
body = [Pair] -> Value
object ["name" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= Name IssueLabel -> Text
forall entity. Name entity -> Text
untagName Name IssueLabel
newLbl, "color" Text -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= String
color]

-- | Delete a label
--
-- > deleteLabel (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug"
deleteLabel :: Auth -> Name Owner -> Name Repo -> Name IssueLabel -> IO (Either Error ())
deleteLabel :: Auth
-> Name Owner
-> Name Repo
-> Name IssueLabel
-> IO (Either Error ())
deleteLabel auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo lbl :: Name IssueLabel
lbl =
    Auth -> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtUnit 'RW () -> IO (Either Error ()))
-> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
deleteLabelR Name Owner
user Name Repo
repo Name IssueLabel
lbl

-- | Delete a label.
-- See <https://developer.github.com/v3/issues/labels/#delete-a-label>
deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
deleteLabelR :: Name Owner
-> Name Repo -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
deleteLabelR user :: Name Owner
user repo :: Name Repo
repo lbl :: Name IssueLabel
lbl =
    CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Delete ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "labels", Name IssueLabel -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name IssueLabel
lbl] ByteString
forall a. Monoid a => a
mempty

-- | The labels on an issue in a repo.
--
-- > labelsOnIssue "thoughtbot" "paperclip" 585
labelsOnIssue :: Name Owner -> Name Repo -> Id Issue -> IO (Either Error (Vector IssueLabel))
labelsOnIssue :: Name Owner
-> Name Repo -> Id Issue -> IO (Either Error (Vector IssueLabel))
labelsOnIssue = Maybe Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> IO (Either Error (Vector IssueLabel))
labelsOnIssue' Maybe Auth
forall a. Maybe a
Nothing

-- | The labels on an issue in a repo using authentication.
--
-- > labelsOnIssue' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585)
labelsOnIssue' :: Maybe Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error (Vector IssueLabel))
labelsOnIssue' :: Maybe Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> IO (Either Error (Vector IssueLabel))
labelsOnIssue' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO (Vector IssueLabel)
 -> IO (Either Error (Vector IssueLabel)))
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id Issue
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
forall (k :: RW).
Name Owner
-> Name Repo
-> Id Issue
-> FetchCount
-> Request k (Vector IssueLabel)
labelsOnIssueR Name Owner
user Name Repo
repo Id Issue
iid FetchCount
FetchAll

-- | List labels on an issue.
-- See <https://developer.github.com/v3/issues/labels/#list-labels-on-an-issue>
labelsOnIssueR :: Name Owner -> Name Repo -> Id Issue -> FetchCount -> Request k (Vector IssueLabel)
labelsOnIssueR :: Name Owner
-> Name Repo
-> Id Issue
-> FetchCount
-> Request k (Vector IssueLabel)
labelsOnIssueR user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid =
    Paths -> QueryString -> FetchCount -> Request k (Vector IssueLabel)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "issues", Id Issue -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Issue
iid, "labels"] []

-- | Add labels to an issue.
--
-- > addLabelsToIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) ["Label1" "Label2"]
addLabelsToIssue :: Foldable f
                 => Auth
                 -> Name Owner
                 -> Name Repo
                 -> Id Issue
                 -> f (Name IssueLabel)
                 -> IO (Either Error (Vector IssueLabel))
addLabelsToIssue :: Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> IO (Either Error (Vector IssueLabel))
addLabelsToIssue auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid lbls :: f (Name IssueLabel)
lbls =
    Auth
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtJSON 'RW (Vector IssueLabel)
 -> IO (Either Error (Vector IssueLabel)))
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
forall (f :: * -> *).
Foldable f =>
Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
addLabelsToIssueR Name Owner
user Name Repo
repo Id Issue
iid f (Name IssueLabel)
lbls

-- | Add lables to an issue.
-- See <https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue>
addLabelsToIssueR :: Foldable f
                  => Name Owner
                  -> Name Repo
                  -> Id Issue
                  -> f (Name IssueLabel)
                  -> Request 'RW (Vector IssueLabel)
addLabelsToIssueR :: Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
addLabelsToIssueR user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid lbls :: f (Name IssueLabel)
lbls =
    CommandMethod
-> Paths
-> ByteString
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
forall a. CommandMethod -> Paths -> ByteString -> Request 'RW a
command CommandMethod
Post Paths
paths ([Name IssueLabel] -> ByteString
forall a. ToJSON a => a -> ByteString
encode ([Name IssueLabel] -> ByteString)
-> [Name IssueLabel] -> ByteString
forall a b. (a -> b) -> a -> b
$ f (Name IssueLabel) -> [Name IssueLabel]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList f (Name IssueLabel)
lbls)
  where
    paths :: Paths
paths = ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "issues", Id Issue -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Issue
iid, "labels"]

-- | Remove a label from an issue.
--
-- > removeLabelFromIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) "bug"
removeLabelFromIssue :: Auth -> Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> IO (Either Error ())
removeLabelFromIssue :: Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> Name IssueLabel
-> IO (Either Error ())
removeLabelFromIssue auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid lbl :: Name IssueLabel
lbl =
    Auth -> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtUnit 'RW () -> IO (Either Error ()))
-> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id Issue
-> Name IssueLabel
-> GenRequest 'MtUnit 'RW ()
removeLabelFromIssueR Name Owner
user Name Repo
repo Id Issue
iid Name IssueLabel
lbl

-- | Remove a label from an issue.
-- See <https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue>
removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
removeLabelFromIssueR :: Name Owner
-> Name Repo
-> Id Issue
-> Name IssueLabel
-> GenRequest 'MtUnit 'RW ()
removeLabelFromIssueR user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid lbl :: Name IssueLabel
lbl =
    CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Delete ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "issues", Id Issue -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Issue
iid, "labels", Name IssueLabel -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name IssueLabel
lbl] ByteString
forall a. Monoid a => a
mempty

-- | Replace all labels on an issue. Sending an empty list will remove all labels from the issue.
--
-- > replaceAllLabelsForIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) ["Label1" "Label2"]
replaceAllLabelsForIssue :: Foldable f
                         => Auth
                         -> Name Owner
                         -> Name Repo
                         -> Id Issue
                         -> f (Name IssueLabel)
                         -> IO (Either Error (Vector IssueLabel))
replaceAllLabelsForIssue :: Auth
-> Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> IO (Either Error (Vector IssueLabel))
replaceAllLabelsForIssue auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid lbls :: f (Name IssueLabel)
lbls =
    Auth
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtJSON 'RW (Vector IssueLabel)
 -> IO (Either Error (Vector IssueLabel)))
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
forall (f :: * -> *).
Foldable f =>
Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
replaceAllLabelsForIssueR Name Owner
user Name Repo
repo Id Issue
iid f (Name IssueLabel)
lbls

-- | Replace all labels on an issue.
-- See <https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue>
--
-- Sending an empty list will remove all labels from the issue.
replaceAllLabelsForIssueR :: Foldable f
                          => Name Owner
                          -> Name Repo
                          -> Id Issue
                          -> f (Name IssueLabel)
                          -> Request 'RW (Vector IssueLabel)
replaceAllLabelsForIssueR :: Name Owner
-> Name Repo
-> Id Issue
-> f (Name IssueLabel)
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
replaceAllLabelsForIssueR user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid lbls :: f (Name IssueLabel)
lbls =
    CommandMethod
-> Paths
-> ByteString
-> GenRequest 'MtJSON 'RW (Vector IssueLabel)
forall a. CommandMethod -> Paths -> ByteString -> Request 'RW a
command CommandMethod
Put Paths
paths ([Name IssueLabel] -> ByteString
forall a. ToJSON a => a -> ByteString
encode ([Name IssueLabel] -> ByteString)
-> [Name IssueLabel] -> ByteString
forall a b. (a -> b) -> a -> b
$ f (Name IssueLabel) -> [Name IssueLabel]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList f (Name IssueLabel)
lbls)
  where
    paths :: Paths
paths = ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "issues", Id Issue -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Issue
iid, "labels"]

-- | Remove all labels from an issue.
--
-- > removeAllLabelsFromIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585)
removeAllLabelsFromIssue :: Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error ())
removeAllLabelsFromIssue :: Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error ())
removeAllLabelsFromIssue auth :: Auth
auth user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid =
    Auth -> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall am (mt :: MediaType *) a (rw :: RW).
(AuthMethod am, ParseResponse mt a) =>
am -> GenRequest mt rw a -> IO (Either Error a)
executeRequest Auth
auth (GenRequest 'MtUnit 'RW () -> IO (Either Error ()))
-> GenRequest 'MtUnit 'RW () -> IO (Either Error ())
forall a b. (a -> b) -> a -> b
$ Name Owner -> Name Repo -> Id Issue -> GenRequest 'MtUnit 'RW ()
removeAllLabelsFromIssueR Name Owner
user Name Repo
repo Id Issue
iid

-- | Remove all labels from an issue.
-- See <https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue>
removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> GenRequest 'MtUnit 'RW ()
removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> GenRequest 'MtUnit 'RW ()
removeAllLabelsFromIssueR user :: Name Owner
user repo :: Name Repo
repo iid :: Id Issue
iid =
    CommandMethod -> Paths -> ByteString -> GenRequest 'MtUnit 'RW ()
forall (mt :: MediaType *) a.
CommandMethod -> Paths -> ByteString -> GenRequest mt 'RW a
Command CommandMethod
Delete ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "issues", Id Issue -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Issue
iid, "labels"] ByteString
forall a. Monoid a => a
mempty

-- | All the labels on a repo's milestone given the milestone ID.
--
-- > labelsOnMilestone "thoughtbot" "paperclip" (Id 2)
labelsOnMilestone :: Name Owner -> Name Repo -> Id Milestone -> IO (Either Error (Vector IssueLabel))
labelsOnMilestone :: Name Owner
-> Name Repo
-> Id Milestone
-> IO (Either Error (Vector IssueLabel))
labelsOnMilestone = Maybe Auth
-> Name Owner
-> Name Repo
-> Id Milestone
-> IO (Either Error (Vector IssueLabel))
labelsOnMilestone' Maybe Auth
forall a. Maybe a
Nothing

-- | All the labels on a repo's milestone given the milestone ID using authentication.
--
-- > labelsOnMilestone' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 2)
labelsOnMilestone' :: Maybe Auth -> Name Owner -> Name Repo -> Id Milestone -> IO (Either Error (Vector IssueLabel))
labelsOnMilestone' :: Maybe Auth
-> Name Owner
-> Name Repo
-> Id Milestone
-> IO (Either Error (Vector IssueLabel))
labelsOnMilestone' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo mid :: Id Milestone
mid =
    Maybe Auth
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall am (mt :: MediaType *) a.
(AuthMethod am, ParseResponse mt a) =>
Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
executeRequestMaybe Maybe Auth
auth (GenRequest 'MtJSON 'RO (Vector IssueLabel)
 -> IO (Either Error (Vector IssueLabel)))
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
-> IO (Either Error (Vector IssueLabel))
forall a b. (a -> b) -> a -> b
$ Name Owner
-> Name Repo
-> Id Milestone
-> FetchCount
-> GenRequest 'MtJSON 'RO (Vector IssueLabel)
forall (k :: RW).
Name Owner
-> Name Repo
-> Id Milestone
-> FetchCount
-> Request k (Vector IssueLabel)
labelsOnMilestoneR Name Owner
user Name Repo
repo Id Milestone
mid FetchCount
FetchAll

-- | Query labels for every issue in a milestone.
-- See <https://developer.github.com/v3/issues/labels/#get-labels-for-every-issue-in-a-milestone>
labelsOnMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> FetchCount -> Request k (Vector IssueLabel)
labelsOnMilestoneR :: Name Owner
-> Name Repo
-> Id Milestone
-> FetchCount
-> Request k (Vector IssueLabel)
labelsOnMilestoneR user :: Name Owner
user repo :: Name Repo
repo mid :: Id Milestone
mid =
    Paths -> QueryString -> FetchCount -> Request k (Vector IssueLabel)
forall a (mt :: RW).
FromJSON a =>
Paths -> QueryString -> FetchCount -> Request mt (Vector a)
pagedQuery ["repos", Name Owner -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Owner
user, Name Repo -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Repo
repo, "milestones", Id Milestone -> Text
forall a. IsPathPart a => a -> Text
toPathPart Id Milestone
mid, "labels"] []