packages feed

basesystems-1.0.0.1: README.md

basesystems
===========

This project code contains for Encoding/Decoding number basesystems in Haskell.
It's implemented in a strategy pattern style where `BaseSystem` is a type-class
which provides the `encoder` and `decoder` methods:

```haskell
class BaseSystem a where
  encoder :: a -> ByteString -> String
  decoder :: a -> String -> Maybe ByteString
```

Then we define data structure representations for `a` and implement each
method with the data from `a`. For instance, this is how the implementations
of base64 and base10 are distinguished.

Example
-------

```haskell
ghci> import Data.BaseSystem
ghci> import Data.BaseSystems
ghci> import Data.BaseSystem.Internal (packInteger)
ghci>
ghci> encoder base10 (packInteger 123) -- "123"
ghci> decoder base10 "123"             -- Just <123 as binary in ByteString>
ghci> encoder base64 (packInteger 123) -- "ew=="
ghci> decoder base64 "ew=="            -- Just <123 as binary in ByteString>
```

Coverage
--------

This project aims to eventually implement most if not all of the
[mulitbase specification's basesytems list](
https://github.com/multiformats/multibase?tab=readme-ov-file#multibase-table).

Currently, the following basesystems are supported:
- base2
- base10
- base16(upper/lower)
- base32(upper/lower) w/pad + nopad
- base32hex(lower/upper) w/pad + nopad
- base58btc
- base64 w/pad + nopad
- base64url w/pad + nopad

Unit testing
------------

Since these functions can have such a large amount of inputs/outputs + possible
edge cases, we generate test sets in bulk from scripts in the python folder to
JSON format. Code for running tests can be found at the [main ipfshs repo](
https://git.sr.ht/~z0/ipfshs).

Reporting bugs
--------------

Bugs can be reported to the ipfshs [ticket tracker](
https://todo.sr.ht/~z0/ipfshs).

License
-------

This project is free software and is provided under the BSD 3-clause licensing
agreement.

Copyright (C) 2026 Zoey McBride
<[zoeymcbride@mailbox.org](mailto:zoeymcbride@mailbox.org)>