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