module Data.Base32String.Default ( B32.Base32String , b32String , b32String' , 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.Base32String as B32 -- | Our mapping table from binary to base32, based on Rfc4648: [A-Z|2-7] table :: BS.ByteString table = BS.pack $ [65..90] ++ [50..55] instance FromJSON B32.Base32String where parseJSON = withText "Base32tring" $ pure . b32String . TE.encodeUtf8 instance ToJSON B32.Base32String where toJSON = String . toText b32String :: BS.ByteString -> B32.Base32String b32String = B32.b32String table b32String' :: BS.ByteString -> B32.Base32String b32String' = B32.b32String' table fromBinary :: B.Binary a => a -> B32.Base32String fromBinary = B32.fromBinary table toBinary :: B.Binary a => B32.Base32String -> a toBinary = B32.toBinary table fromBytes :: BS.ByteString -> B32.Base32String fromBytes = B32.fromBytes table toBytes :: B32.Base32String -> BS.ByteString toBytes = B32.toBytes table fromText :: T.Text -> B32.Base32String fromText = B32.fromText table toText :: B32.Base32String -> T.Text toText = B32.toText