One Day Challenge: SSIF

2020-03-09 | 2 min | 266 words
in programming | tagged rust
Contents []

This is my second One Day Challenge that I have done for myself, and I think a far more interesting challenge than the previous. Since I had some time while I was on vacation I decided to take on a project that I had been thinking of for a while: I designed and implemented an image format in a day.

Steve's Simple Image Format or SSIF for short is a basic binary image format with a reference encoder and decoder written in Rust. I chose Rust because I love the language and thing that it us suitably low-level for such a task. Notably my implementation is entirely in safe Rust, as it should be.

The code can be found in the repo, with the specification for the image format in the file.

I acutally really liked this project and it is something that I may come back to. I'm quite proud of my design, with SSIF supporting some nice features like a basic form of compression.

When I started I didn't even plan to write the encoder, only the decoder, but after getting going I found myself writing both and even implementing the compression system into the encoder.

While I do think that the code still needs some work, I am particularly proud of the decoder, which leverages higher-order programming and the itertools crate to perform the decoding in one chain iterator functions.

I am thinking of coming back to this project and adding some more tools, and probably a basic SSIF view viewer or BMP import/export.