packages feed

toxcore-0.2.11: tools/toxsave-convert.hs

module Main (main) where

import           Control.Applicative        ((<$>), (<|>))
import qualified Data.Binary                as Binary
import qualified Data.ByteString.Lazy       as LBS
import qualified Data.ByteString.Lazy.Char8 as LBS8
import           Data.Maybe                 (fromMaybe)
import           Network.Tox.SaveData       (SaveData)
import           Text.Groom                 (groom)
import           Text.Read                  (readMaybe)


parse :: LBS.ByteString -> LBS.ByteString
parse str = fromMaybe LBS.empty $
    (Binary.encode <$> (readMaybe $ LBS8.unpack str :: Maybe SaveData))
    <|>
    (Just . LBS8.pack . (++ "\n") . groom $ (Binary.decode str :: SaveData))


main :: IO ()
main = parse <$> LBS.getContents >>= LBS.putStr