diff --git a/src/GitHub.hs b/src/GitHub.hs index 6b5f8d36..e00a53cb 100644 --- a/src/GitHub.hs +++ b/src/GitHub.hs @@ -62,7 +62,6 @@ module GitHub ( -- Missing endpoints: -- -- * Query a specific revision of a gist - -- * Create a gist -- * Edit a gist -- * List gist commits -- * Check if a gist is starred @@ -70,6 +69,7 @@ module GitHub ( -- * List gist forks gistsR, gistR, + createGistR, starGistR, unstarGistR, deleteGistR, diff --git a/src/GitHub/Data/Gists.hs b/src/GitHub/Data/Gists.hs index 3e1fbe79..b6d1b673 100644 --- a/src/GitHub/Data/Gists.hs +++ b/src/GitHub/Data/Gists.hs @@ -89,3 +89,35 @@ instance FromJSON GistComment where <*> o .: "body" <*> o .: "updated_at" <*> o .: "id" + +data NewGist = NewGist + { newGistDescription :: !(Maybe Text) + , newGistFiles :: !(HashMap Text NewGistFile) + , newGistPublic :: !(Maybe Bool) + } deriving (Show, Data, Typeable, Eq, Generic) + +instance NFData NewGist where rnf = genericRnf +instance Binary NewGist + +instance ToJSON NewGist where + toJSON NewGist { newGistDescription = description + , newGistFiles = files + , newGistPublic = public + } = object $ filter notNull + [ "description" .= description + , "files" .= files + , "public" .= public + ] + where + notNull (_, Null) = False + notNull (_, _) = True + +data NewGistFile = NewGistFile + { newGistFileContent :: !Text + } deriving (Show, Data, Typeable, Eq, Generic) + +instance NFData NewGistFile where rnf = genericRnf +instance Binary NewGistFile + +instance ToJSON NewGistFile where + toJSON (NewGistFile c) = object ["content" .= c] diff --git a/src/GitHub/Endpoints/Gists.hs b/src/GitHub/Endpoints/Gists.hs index 783e0588..de8e6c20 100644 --- a/src/GitHub/Endpoints/Gists.hs +++ b/src/GitHub/Endpoints/Gists.hs @@ -7,6 +7,7 @@ module GitHub.Endpoints.Gists ( gistsR, gistR, + createGistR, starGistR, unstarGistR, deleteGistR, @@ -28,6 +29,11 @@ gistR :: Name Gist -> Request k Gist gistR gid = query ["gists", toPathPart gid] [] +-- | Create a new gist +-- See +createGistR :: NewGist -> Request 'RW Gist +createGistR ngist = command Post ["gists"] (encode ngist) + -- | Star a gist by the authenticated user. -- See starGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()