Usage

Basic usage

import dev.cheleb.scalamigen.*

This import is necessary to bring the implicit conversions into scope.

Now you can use the asForm method on any Var to render a form for the value it holds with double binding.


case class Cat(name: String, age: Int)

val eitherVar = Var(Cat("Scala le chat", 6))

eitherVar.asForm  // (2) form rendering

As long as the case class is built on elments that have a Form[..] instance, the form will be rendered correctly.

Supported types

  • String, Int, Long, Double, Boolean
  • LocalDate
  • Option[A]
  • List[A]
  • Either[A, B]
  • IronType[T, C]
    • Positive

Customizing the form rendering

At anytime you can customize the form rendering by providing a Form instance for the type you want to render.

  • opaque type
opaque type Password = String
object Password:
  def apply(password: String): Password = password
  given Form[Password] = secretForm(apply) // (1) form instance
  • IronType

Iron type are supported as long as their base type is supported by the library. For example, Positive is a wrapper around Int and Long and can be used as such.