{-# LANGUAGE TemplateHaskell #-} module Gitlab.Wikis where import Data.Aeson import Gitlab.Core import Lens.Micro.Platform hiding ( (.=) ) import Network.HTTP.Conduit import RIO data GitlabWikiPage = GitlabWikiPage { _glWikiPageContent :: Text , _glWikiPageFormat :: Text , _glWikiPageSlug :: Text , _glWikiPageTitle :: Text } deriving (Eq, Show) $(makeLenses ''GitlabWikiPage) instance FromJSON GitlabWikiPage where parseJSON = withObject "GitlabWikiPage" $ \v -> GitlabWikiPage <$> v .: "content" <*> v .: "format" <*> v .: "slug" <*> v .: "title" instance ToJSON GitlabWikiPage where toJSON x = object ["content" .= _glWikiPageContent x, "format" .= _glWikiPageFormat x, "slug" .= _glWikiPageSlug x, "title" .= _glWikiPageTitle x] getProjectWiki :: MonadGitlab env m => Text -> m [GitlabWikiPage] getProjectWiki p = gitlabRequest "GET" ("/projects/" <> rParam p <> "/wikis?with_content=1") mempty createWikiPage :: MonadGitlab env m => Text -> GitlabWikiPage -> m GitlabWikiPage createWikiPage p o = gitlabRequest "POST" ("/projects/" <> rParam p <> "/wikis") $ RequestBodyLBS $ encode o