Tiny types scala edition
Previously I wrote about generating value type wrappers on top of C# primitives for better handling of domain level knowledge. This time I decided to try it out in scala as I’m jumping into the JVM world.
With scala we don’t have the value type capability that c# has, but we can sort of get there with implicits and case classes.
The simple gist is to generate stuff like
package com.devshorts.data
case class foo(data : String)
case class bar(data : String)
case class bizBaz(data : Int)
case class Data(data : java.util.UUID)
And the implicit conversions
package com.devshorts.data
object Conversions{
implicit def convertfoo(i : foo) : String = i.data
implicit def convertbar(i : bar) : String = i.data
implicit def convertbizBaz(i : bizBaz) : Int = i.data
implicit def convertData(i : Data) : java.util.UUID = i.data
}
Now you get a similar feel of primitive wrapping with function level unboxing and you can pass your primitive case class wrappers to more generic functions.
For this case I wrote a simple console generator and played around with zsh auto completion for it too. Full source located at my github