rosa 0.1.1.0 → 0.1.2.0
raw patch · 3 files changed
+48/−38 lines, 3 files
Files
- Main.hs +46/−36
- README.md +1/−1
- rosa.cabal +1/−1
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: