module Data.Base58String.Bitcoin ( B58.Base58String , b58String , fromBinary , toBinary , fromBytes , toBytes , fromText , toText ) where import Control.Applicative (pure) import Data.Aeson import qualified Data.Binary as B (Binary) import qualified Data.ByteString as BS import qualified Data.Text as T import qualified Data.Text.Encoding as TE import qualified Data.Base58String as B58 -- | Our mapping table from binary to base58, based on Bitcoin's table table :: BS.ByteString table = BS.pack $ [49..57] ++ [65..72] ++ [74..78] ++ [80..90] ++ [97..107] ++ [109..122] instance FromJSON B58.Base58String where parseJSON = withText "Base58tring" $ pure . b58String . TE.encodeUtf8 instance ToJSON B58.Base58String where toJSON = String . toText b58String :: BS.ByteString -> B58.Base58String b58String = B58.b58String table fromBinary :: B.Binary a => a -> B58.Base58String fromBinary = B58.fromBinary table toBinary :: B.Binary a => B58.Base58String -> a toBinary = B58.toBinary table fromBytes :: BS.ByteString -> B58.Base58String fromBytes = B58.fromBytes table toBytes :: B58.Base58String -> BS.ByteString toBytes = B58.toBytes table fromText :: T.Text -> B58.Base58String fromText = B58.fromText table toText :: B58.Base58String -> T.Text toText = B58.toText