-----------------------------------------------------------------------------
-- |
-- License     :  BSD-3-Clause
-- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
--
-- The underlying tree of SHA1s and files that make up a git repo. The API is
-- described on <http://developer.github.com/v3/git/trees/>.
module GitHub.Endpoints.GitData.Trees (
    tree,
    tree',
    treeR,
    nestedTree,
    nestedTree',
    nestedTreeR,
    module GitHub.Data,
    ) where

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

-- | A tree for a SHA1.
--
-- > tree (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844"
tree' :: Maybe Auth -> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
tree' :: Maybe Auth
-> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
tree' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo sha :: Name Tree
sha =
    Maybe Auth -> GenRequest 'MtJSON 'RO Tree -> IO (Either Error Tree)
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 Tree -> IO (Either Error Tree))
-> GenRequest 'MtJSON 'RO Tree -> IO (Either Error Tree)
forall a b. (a -> b) -> a -> b
$ Name Owner -> Name Repo -> Name Tree -> GenRequest 'MtJSON 'RO Tree
forall (k :: RW).
Name Owner -> Name Repo -> Name Tree -> Request k Tree
treeR Name Owner
user Name Repo
repo Name Tree
sha

-- | A tree for a SHA1.
--
-- > tree "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844"
tree :: Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
tree :: Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
tree = Maybe Auth
-> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
tree' Maybe Auth
forall a. Maybe a
Nothing

-- | Query a Tree.
-- See <https://developer.github.com/v3/git/trees/#get-a-tree>
treeR :: Name Owner -> Name Repo -> Name Tree -> Request k Tree
treeR :: Name Owner -> Name Repo -> Name Tree -> Request k Tree
treeR user :: Name Owner
user repo :: Name Repo
repo sha :: Name Tree
sha =
    Paths -> QueryString -> Request k Tree
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, "git", "trees", Name Tree -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Tree
sha] []

-- | A recursively-nested tree for a SHA1.
--
-- > nestedTree' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844"
nestedTree' :: Maybe Auth -> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
nestedTree' :: Maybe Auth
-> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
nestedTree' auth :: Maybe Auth
auth user :: Name Owner
user repo :: Name Repo
repo sha :: Name Tree
sha =
    Maybe Auth -> GenRequest 'MtJSON 'RO Tree -> IO (Either Error Tree)
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 Tree -> IO (Either Error Tree))
-> GenRequest 'MtJSON 'RO Tree -> IO (Either Error Tree)
forall a b. (a -> b) -> a -> b
$ Name Owner -> Name Repo -> Name Tree -> GenRequest 'MtJSON 'RO Tree
forall (k :: RW).
Name Owner -> Name Repo -> Name Tree -> Request k Tree
nestedTreeR Name Owner
user Name Repo
repo Name Tree
sha

-- | A recursively-nested tree for a SHA1.
--
-- > nestedTree "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844"
nestedTree :: Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
nestedTree :: Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
nestedTree = Maybe Auth
-> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree)
nestedTree' Maybe Auth
forall a. Maybe a
Nothing

-- | Query a Tree Recursively.
-- See <https://developer.github.com/v3/git/trees/#get-a-tree-recursively>
nestedTreeR :: Name Owner -> Name Repo -> Name Tree -> Request k Tree
nestedTreeR :: Name Owner -> Name Repo -> Name Tree -> Request k Tree
nestedTreeR user :: Name Owner
user repo :: Name Repo
repo sha :: Name Tree
sha =
    Paths -> QueryString -> Request k Tree
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, "git", "trees", Name Tree -> Text
forall a. IsPathPart a => a -> Text
toPathPart Name Tree
sha] [("recursive", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just "1")]