Skip to content

Commit 66eb08c

Browse files
authored
Merge pull request #337 from sajidanower23/sajid/create-milestone
Create milestone
2 parents cdae698 + 8871b43 commit 66eb08c

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

src/GitHub.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,12 @@ module GitHub (
139139
--
140140
-- Missing endpoints:
141141
--
142-
-- * Create a milestone
143142
-- * Update a milestone
144143
-- * Delete a milestone
145144
milestonesR,
146145
milestoneR,
146+
createMilestone,
147+
createMilestoneR,
147148

148149
-- * Organizations
149150
-- | See <https://developer.github.com/v3/orgs/>

src/GitHub/Data/Milestone.hs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,26 @@ instance FromJSON Milestone where
4040
<*> o .: "url"
4141
<*> o .: "created_at"
4242
<*> o .: "state"
43+
44+
data NewMilestone = NewMilestone
45+
{ newMilestoneTitle :: !Text
46+
, newMilestoneState :: !Text
47+
, newMilestoneDescription :: !(Maybe Text)
48+
, newMilestoneDueOn :: !(Maybe UTCTime)
49+
}
50+
deriving (Show, Data, Typeable, Eq, Ord, Generic)
51+
52+
instance NFData NewMilestone where rnf = genericRnf
53+
instance Binary NewMilestone
54+
55+
56+
instance ToJSON NewMilestone where
57+
toJSON (NewMilestone title state desc due) = object $ filter notNull
58+
[ "title" .= title
59+
, "state" .= state
60+
, "description" .= desc
61+
, "due_on" .= due
62+
]
63+
where
64+
notNull (_, Null) = False
65+
notNull (_, _) = True

src/GitHub/Endpoints/Issues/Milestones.hs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ module GitHub.Endpoints.Issues.Milestones (
1111
milestonesR,
1212
milestone,
1313
milestoneR,
14+
createMilestone,
15+
createMilestoneR,
1416
module GitHub.Data,
1517
) where
1618

@@ -50,3 +52,13 @@ milestone user repo mid =
5052
milestoneR :: Name Owner -> Name Repo -> Id Milestone -> Request k Milestone
5153
milestoneR user repo mid =
5254
query ["repos", toPathPart user, toPathPart repo, "milestones", toPathPart mid] []
55+
56+
createMilestone :: Auth -> Name Owner -> Name Repo -> NewMilestone -> IO (Either Error Milestone)
57+
createMilestone auth user repo mst = executeRequest auth $ createMilestoneR user repo mst
58+
59+
-- | Create a milestone.
60+
-- See <https://developer.github.com/v3/issues/milestones/#create-a-milestone>
61+
createMilestoneR :: Name Owner -> Name Repo -> NewMilestone -> Request 'RW Milestone
62+
createMilestoneR user repo =
63+
command Post ["repos", toPathPart user, toPathPart repo, "milestones"] . encode
64+

0 commit comments

Comments
 (0)