1{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE ScopedTypeVariables #-}
6-- Module : Network.Google.Data.JSON
7-- Copyright : (c) 2015-2016 Brendan Hay <brendan.g.hay@gmail.com>
8-- License : Mozilla Public License, v. 2.0.
9-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
10-- Stability : provisional
11-- Portability : non-portable (GHC extensions)
13module Network.Google.Data.JSON
35import Data.Aeson.Types
37import Data.HashMap.Strict (HashMap)
38import Data.Text (Text)
39import qualified Data.Text as Text
40import Web.HttpApiData (FromHttpApiData (..), ToHttpApiData (..))
44newtype Textual a = Textual a
58instance (FromJSON a, FromHttpApiData a) => FromJSON (Textual a) where
59 parseJSON (String s) =
60 either (fail . Text.unpack) (pure . Textual) (parseQueryParam s)
61 parseJSON o = Textual <$> parseJSON o
63instance ToHttpApiData a => ToJSON (Textual a) where
64 toJSON (Textual x) = String (toQueryParam x)
66parseJSONObject :: FromJSON a => HashMap Text Value -> Parser a
67parseJSONObject = parseJSON . Object
69parseJSONText :: FromHttpApiData a => String -> Value -> Parser a
70parseJSONText n = withText n (either (fail . f) pure . parseQueryParam)
72 f x = n ++ " - " ++ Text.unpack x
74toJSONText :: ToHttpApiData a => a -> Value
75toJSONText = String . toQueryParam
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list