Building it for fun and practicing metaprogramming, hope it is useful for you.