packages feed

rosa 0.1.1.0 → 0.1.2.0

raw patch · 3 files changed

+48/−38 lines, 3 files

Files

Main.hs view
@@ -4,61 +4,71 @@ import Data.Aeson          (decode, toJSON) import Data.Maybe          (fromJust) import Data.HashMap.Strict (delete)-import Control.Monad       (when) import Control.Lens import Control.Applicative--import qualified Data.ByteString.Lazy.Char8 as C import System.Console.ArgParser import System.Process-+import qualified Data.ByteString.Lazy.Char8 as C import Json + data ProgArgs = ProgArgs-    { name  :: String-    , url   :: String-    , local :: Bool-    , block :: Bool-    , raw   :: Bool+    { name     :: String+    , url      :: String+    , dnschain :: Bool+    , block    :: Bool+    , raw      :: Bool     } deriving (Show) + parser :: ParserSpec ProgArgs parser = ProgArgs-    `parsedBy` reqPos   "name"  `Descr` "Namecoin name id"+    `parsedBy` reqPos   "name"     `Descr` "Namecoin name id"     `andBy`    optFlag   "http://dns.dnschain.net/" "url"-                                `Descr` "Use custom dnschain API url"-    `andBy`    boolFlag "local" `Descr` "Use local namecoind db"-    `andBy`    boolFlag "block" `Descr` "Show blockchain data (require local connecton)"-    `andBy`    boolFlag "raw"   `Descr` "Print raw JSON data"+                                   `Descr` "Use custom api url"+    `andBy`    boolFlag "dnschain" `Descr` "Use dnschain api"+    `andBy`    boolFlag "block"    `Descr` "Show blockchain data (require local connecton)"+    `andBy`    boolFlag "raw"      `Descr` "Print raw JSON data" + interface :: IO (CmdLnInterface ProgArgs) interface =     (`setAppDescr` "Query the namecoin blockchain") <$>      (`setAppEpilog` "Stat rosa pristina nomine, nomina nuda tenemus.") <$>     mkApp parser -exec :: ProgArgs -> IO ()-exec args@ProgArgs{..} =-    if local-    then do-        out <- readProcess "namecoind" ["name_show", name] ""-        case decode (C.pack out) of-            Just res -> do-                putStrLn (repr value)-                when block $ putStrLn (repr extra)-                where-                    value = fromJust . decode . C.pack $ res |: "value"-                    extra = toJSON $ delete "value" res-            Nothing  -> putStrLn "Error parsing data"-    else do-        req <- get (url ++ name)-        let body = req ^. responseBody-        if raw-        then print body-        else putStrLn $-            case decode body of-                Just res -> repr res-                Nothing  -> "Error parsing data"  main :: IO () main = interface >>= flip runApp exec+++exec :: ProgArgs -> IO ()+exec args@ProgArgs{..} =+    if dnschain+    then handleDnschain url name raw+    else handleLocal name block+++handleLocal :: String -> Bool -> IO ()+handleLocal name block = do+    out <- readProcess "namecoind" ["name_show", name] ""+    case decode (C.pack out) of+        Just res -> do+            jprint $ reparse (res |: "value")+            if block then jprint extra else return ()+            where+                reparse = fromJust . decode . C.pack+                extra   = toJSON $ delete "value" res+        Nothing  -> putStrLn "Error parsing data"+++handleDnschain :: String -> String -> Bool -> IO ()+handleDnschain url name raw = do+    req <- get (url ++ name)+    let body = req ^. responseBody+    if raw+    then print body+    else putStrLn $+        case decode body of+            Just res -> repr res+            Nothing  -> "Error parsing data"
README.md view
@@ -23,7 +23,7 @@  Connect to namecoind server for blockhain data -    $ rosa d/namechain -lb+    $ rosa d/namechain -b     ip: 83.96.168.183     map:       *:
rosa.cabal view
@@ -1,5 +1,5 @@ name:                rosa-version:             0.1.1.0+version:             0.1.2.0 synopsis:            Query the namecoin blockchain description: