sbp 0.51.1 → 0.51.2
raw patch · 3 files changed
+111/−1 lines, 3 filesdep +binary-conduitdep +conduitdep +conduit-combinatorsdep ~basenew-component:exe:json2sbpnew-component:exe:sbp2json
Dependencies added: binary-conduit, conduit, conduit-combinators, conduit-extra, resourcet
Dependency ranges changed: base
Files
- main/JSON2SBP.hs +40/−0
- main/SBP2JSON.hs +35/−0
- sbp.cabal +36/−1
+ main/JSON2SBP.hs view
@@ -0,0 +1,40 @@+-- |+-- Module: JSON2SBP+-- Copyright: Copyright (C) 2015 Swift Navigation, Inc.+-- License: LGPL-3+-- Maintainer: Mark Fine <dev@swiftnav.com>+-- Stability: experimental+-- Portability: portable+--+-- JSON to SBP tool - reads SBP JSON from stdin and sends SBP JSON to+-- stdout.++import BasicPrelude+import Control.Monad.Trans.Resource+import Data.Aeson+import Data.Conduit+import Data.Conduit.Binary+import qualified Data.Conduit.List as CL+import Data.Conduit.Serialization.Binary+import qualified Data.Conduit.Text as CT+import SwiftNav.SBP+import System.IO++newtype SBPMsgData = SBPMsgData+ { sbpMsgData :: SBPMsg+ } deriving ( Show, Read, Eq )++instance FromJSON SBPMsgData where+ parseJSON (Object v) = SBPMsgData <$> v .: "data"+ parseJSON _ = mzero++-- | Decode a SBPMsg from JSON.+decodeSBPMsg :: ByteString -> Maybe SBPMsg+decodeSBPMsg v = decodeStrict v <|> (fmap sbpMsgData $ decodeStrict v)++main :: IO ()+main = runResourceT $+ sourceHandle stdin =$=+ CT.decode CT.utf8 =$= CT.lines =$= CL.mapMaybe (decodeSBPMsg . encodeUtf8) =$=+ conduitEncode $$+ sinkHandle stdout
+ main/SBP2JSON.hs view
@@ -0,0 +1,35 @@+-- |+-- Module: SBP2JSON+-- Copyright: Copyright (C) 2015 Swift Navigation, Inc.+-- License: LGPL-3+-- Maintainer: Mark Fine <dev@swiftnav.com>+-- Stability: experimental+-- Portability: portable+--+-- SBP to JSON tool - reads SBP binary from stdin and sends SBP JSON+-- to stdout.++import BasicPrelude+import Control.Monad.Trans.Resource+import Data.Aeson+import Data.Aeson.Encode+import Data.ByteString.Builder+import qualified Data.ByteString.Lazy as BL+import Data.Conduit+import Data.Conduit.Binary+import qualified Data.Conduit.List as CL+import Data.Conduit.Serialization.Binary+import SwiftNav.SBP+import System.IO++-- | Encode a SBPMsg to a line of JSON.+encodeLine :: SBPMsg -> ByteString+encodeLine v = BL.toStrict $ toLazyByteString $+ encodeToByteStringBuilder (toJSON v) <> "\n"++main :: IO ()+main = runResourceT $+ sourceHandle stdin =$=+ conduitDecode =$=+ CL.map encodeLine $$+ sinkHandle stdout
sbp.cabal view
@@ -1,5 +1,5 @@ name: sbp-version: 0.51.1+version: 0.51.2 synopsis: SwiftNav's SBP Library homepage: https://github.com/swift-nav/libsbp license: LGPL-3@@ -61,6 +61,41 @@ NoImplicitPrelude OverloadedStrings +executable sbp2json+ hs-source-dirs: main+ main-is: SBP2JSON.hs+ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall+ build-depends: aeson+ , base+ , basic-prelude+ , binary-conduit+ , bytestring+ , conduit+ , conduit-combinators+ , conduit-extra+ , resourcet+ , sbp+ default-language: Haskell2010+ default-extensions: NoImplicitPrelude+ OverloadedStrings++executable json2sbp+ hs-source-dirs: main+ main-is: JSON2SBP.hs+ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall+ build-depends: aeson+ , base+ , basic-prelude+ , binary-conduit+ , bytestring+ , conduit+ , conduit-combinators+ , conduit-extra+ , resourcet+ , sbp+ default-language: Haskell2010+ default-extensions: NoImplicitPrelude+ OverloadedStrings benchmark bench type: exitcode-stdio-1.0 hs-source-dirs: bench