Skip to content

Commit 8a851fe

Browse files
Add Contents example to cabal file and update code.
1 parent 779315b commit 8a851fe

2 files changed

Lines changed: 48 additions & 22 deletions

File tree

samples/Repos/Contents.hs

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1-
module GetContents where
1+
{-# LANGUAGE NoImplicitPrelude #-}
2+
{-# LANGUAGE OverloadedStrings #-}
23

3-
import qualified Github.Repos as Github
4-
import Data.List
5-
import Prelude hiding (truncate, getContents)
4+
module Main where
65

6+
import Common hiding
7+
(getContents, intercalate, take, truncate, unlines)
8+
import Data.Text
9+
(Text, intercalate, pack, take, unlines)
10+
import Data.Text.IO (putStrLn)
11+
import qualified Data.Vector as Vector
12+
import qualified GitHub.Data as GitHub
13+
import qualified GitHub.Endpoints.Repos.Contents as GitHub
14+
15+
main :: IO ()
716
main = do
817
putStrLn "Root"
918
putStrLn "===="
@@ -13,34 +22,37 @@ main = do
1322
putStrLn "======="
1423
getContents "LICENSE"
1524

25+
getContents :: Text -> IO ()
1626
getContents path = do
17-
contents <- Github.contentsFor "mike-burns" "ohlaunch" path Nothing
18-
putStrLn $ either (("Error: " ++) . show) formatContents contents
27+
contents <- GitHub.contentsFor "mike-burns" "ohlaunch" path Nothing
28+
putStrLn $ either (("Error: " <>) . tshow) formatContents contents
1929

20-
formatContents (Github.ContentFile fileData) =
21-
formatContentInfo (Github.contentFileInfo fileData) ++
30+
formatContents :: GitHub.Content -> Text
31+
formatContents (GitHub.ContentFile fileData) =
32+
formatContentInfo (GitHub.contentFileInfo fileData) <>
2233
unlines
23-
[ show (Github.contentFileSize fileData) ++ " bytes"
24-
, "encoding: " ++ Github.contentFileEncoding fileData
25-
, "data: " ++ truncate (Github.contentFileContent fileData)
34+
[ tshow (GitHub.contentFileSize fileData) <> " bytes"
35+
, "encoding: " <> GitHub.contentFileEncoding fileData
36+
, "data: " <> truncate (GitHub.contentFileContent fileData)
2637
]
2738

28-
formatContents (Github.ContentDirectory items) =
29-
intercalate "\n\n" $ map formatItem items
39+
formatContents (GitHub.ContentDirectory items) =
40+
intercalate "\n\n" . map formatItem . Vector.toList $ items
3041

42+
formatContentInfo :: GitHub.ContentInfo -> Text
3143
formatContentInfo contentInfo =
3244
unlines
33-
[ "name: " ++ Github.contentName contentInfo
34-
, "path: " ++ Github.contentPath contentInfo
35-
, "sha: " ++ Github.contentSha contentInfo
36-
, "url: " ++ Github.contentUrl contentInfo
37-
, "git url: " ++ Github.contentGitUrl contentInfo
38-
, "html url: " ++ Github.contentHtmlUrl contentInfo
45+
[ "name: " <> GitHub.contentName contentInfo
46+
, "path: " <> GitHub.contentPath contentInfo
47+
, "sha: " <> GitHub.contentSha contentInfo
48+
, "url: " <> (GitHub.getUrl . GitHub.contentUrl) contentInfo
49+
, "git url: " <> (GitHub.getUrl . GitHub.contentGitUrl) contentInfo
50+
, "html url: " <> (GitHub.getUrl . GitHub.contentHtmlUrl) contentInfo
3951
]
4052

4153
formatItem item =
42-
"type: " ++ show (Github.contentItemType item) ++ "\n" ++
43-
formatContentInfo (Github.contentItemInfo item)
54+
"type: " <> tshow (GitHub.contentItemType item) <> "\n" <>
55+
formatContentInfo (GitHub.contentItemInfo item)
4456

4557

46-
truncate str = take 40 str ++ "... (truncated)"
58+
truncate str = take 40 str <> "... (truncated)"

samples/github-samples.cabal

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,20 @@ executable github-operational
190190
, transformers-compat
191191
default-language: Haskell2010
192192

193+
executable github-repos-contents-example
194+
main-is: Contents.hs
195+
hs-source-dirs:
196+
Repos
197+
ghc-options: -Wall
198+
build-depends:
199+
base
200+
, base-compat
201+
, github
202+
, github-samples
203+
, text
204+
, vector
205+
default-language: Haskell2010
206+
193207
executable github-show-deploy-key
194208
main-is: ShowDeployKey.hs
195209
hs-source-dirs:

0 commit comments

Comments
 (0)