1{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE ScopedTypeVariables #-}
6-- Module : Network.Google.Data.JSON
7-- Copyright : (c) 2015 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
44newtype Textual a = Textual a
45 deriving (Eq, Ord, Read, Show, Num, Fractional, Data, Typeable, FromText, ToText)
47instance (FromJSON a, FromText a) => FromJSON (Textual a) where
48 parseJSON (String s) =
50 Just x -> pure (Textual x)
51 Nothing -> fail $ "Failed to parse value from " ++ Text.unpack s
52 parseJSON o = Textual <$> parseJSON o
54instance ToText a => ToJSON (Textual a) where
55 toJSON (Textual x) = String (toText x)
57parseJSONObject :: FromJSON a => HashMap Text Value -> Parser a
58parseJSONObject = parseJSON . Object
60parseJSONText :: FromText a => String -> Value -> Parser a
61parseJSONText n = withText n (maybe (fail n) pure . fromText)
63toJSONText :: ToText a => a -> Value
64toJSONText = String . toText
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