Monthly Downloads: 10
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Latest version: v0.2.3.0
bit-protocol alternatives and similar packages
Based on the "bits" category.
Alternatively, view bit-protocol alternatives based on common mentions on social networks and blogs.
bits8.1 0.0 bit-protocol VS bitsBit twiddling and bitwise serialization primitives
bits-bytestring2.8 0.0 bit-protocol VS bits-bytestringBits instance for bytestrings.
bits-bytestring-lazyBits instance for lazy bytestrings.
Clean code begins in your IDE with SonarLint
Up your coding game and discover issues early. SonarLint is a free plugin that helps you find & fix bugs and security issues from the moment you start writing code. Install from your favorite IDE marketplace today.
Do you think we are missing an alternative of bit-protocol or a related project?
A package suitable for binary protocols defined in a manner where you have bit counts not aligned by 8.
For example, if you have a protocol for sending user profiles saying:
The value sent must be a base64url-encoded string consisting of four values:
- 6 bits representing user's age
- 7 bits for their favorite number
- 5 bits for their lucky number
- 6 bits for a random number
you could use the library as follows:
import Data.BitProtocol import Data.ByteString.Base64.URL (encode) main :: IO () main = do let age = 29 fav = 12 lucky = 13 rand = 14 -- the number in protocol should be base64url(011101_0001100_01101_001110) print $ encode $ encodeBS8 $ [BitsVal 6 age, BitsVal 7 fav, BitsVal 5 lucky, BitsVal 6 rand] -- will output "dGNO" -- which is the same as `encode (BC8.pack (map chr [0b01110100, 0b01100011, 0b01001110]))`
Parsing can be done like this:
let (Right bs) = decode "dGNO" let (xs, BitsVal 0 0, "") = parseBS8 [6, 7, 5, 6] bs print xs -- Will output: -- ( [BitsVal 6 29, BitsVal 7 12, BitsVal 5 13, BitsVal 6 14] -- , BitsVal 0 0 -- , "")
Warning! Does not support negative numbers.
- [ ] use shift operations instead of division in more places
- [ ] add a performance test
- [ ] consider adding checks upon arithmetic overflows (if you use
Intin quickcheck test you'll quickly find some)