2011-09-01 19:16:31 +00:00
|
|
|
{- git-annex JSON output
|
|
|
|
-
|
2015-01-21 16:50:09 +00:00
|
|
|
- Copyright 2011 Joey Hess <id@joeyh.name>
|
2011-09-01 19:16:31 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module Messages.JSON (
|
|
|
|
start,
|
|
|
|
end,
|
2011-09-02 20:44:04 +00:00
|
|
|
note,
|
2011-12-23 02:03:18 +00:00
|
|
|
add,
|
2015-06-16 17:50:28 +00:00
|
|
|
complete,
|
|
|
|
DualDisp(..),
|
2011-09-01 19:16:31 +00:00
|
|
|
) where
|
|
|
|
|
2011-09-02 20:44:04 +00:00
|
|
|
import Text.JSON
|
|
|
|
|
2011-09-01 19:16:31 +00:00
|
|
|
import qualified Utility.JSONStream as Stream
|
2016-03-06 16:56:39 +00:00
|
|
|
import Types.Key
|
|
|
|
import Data.Maybe
|
|
|
|
|
|
|
|
start :: String -> Maybe FilePath -> Maybe Key -> IO ()
|
|
|
|
start command file key = putStr $ Stream.start $ catMaybes
|
|
|
|
[ part "command" (Just command)
|
|
|
|
, part "file" file
|
|
|
|
, part "key" (fmap key2file key)
|
|
|
|
]
|
2012-11-11 04:51:07 +00:00
|
|
|
where
|
2016-03-06 16:56:39 +00:00
|
|
|
part _ Nothing = Nothing
|
|
|
|
part l (Just v) = Just (l, v)
|
2011-09-01 19:16:31 +00:00
|
|
|
|
|
|
|
end :: Bool -> IO ()
|
|
|
|
end b = putStr $ Stream.add [("success", b)] ++ Stream.end
|
|
|
|
|
|
|
|
note :: String -> IO ()
|
2011-09-02 20:44:04 +00:00
|
|
|
note s = add [("note", s)]
|
|
|
|
|
|
|
|
add :: JSON a => [(String, a)] -> IO ()
|
|
|
|
add v = putStr $ Stream.add v
|
2011-12-23 02:03:18 +00:00
|
|
|
|
|
|
|
complete :: JSON a => [(String, a)] -> IO ()
|
2013-04-03 07:52:41 +00:00
|
|
|
complete v = putStr $ Stream.start v ++ Stream.end
|
2015-06-16 17:50:28 +00:00
|
|
|
|
|
|
|
-- A value that can be displayed either normally, or as JSON.
|
|
|
|
data DualDisp = DualDisp
|
|
|
|
{ dispNormal :: String
|
|
|
|
, dispJson :: String
|
|
|
|
}
|
|
|
|
|
|
|
|
instance JSON DualDisp where
|
|
|
|
showJSON = JSString . toJSString . dispJson
|
|
|
|
readJSON _ = Error "stub"
|
|
|
|
|
|
|
|
instance Show DualDisp where
|
|
|
|
show = dispNormal
|