SumCaseGeneration

trait SumCaseGeneration[Pipe[_, _], In, Out]
Companion:
object
class Object
trait Matchable
class Any
trait Generators[Pipe, In, Out]
trait PlatformSumCaseGeneration[Pipe, In, Out]
Definitions[Pipe, In, Out] & Generators[Pipe, In, Out]

Type members

Classlikes

final case class EnumData[A](elements: List[Case[_ <: A]])

Stores information from what pieces Out is made

Stores information from what pieces Out is made

Companion:
object
object EnumData
Companion:
class
final case class EnumGeneratorData(subtypes: ListMap[String, InputSubtype])

Final platform-independent result of matching inputs with outputs using resolved strategies

Final platform-independent result of matching inputs with outputs using resolved strategies

Companion:
object
Companion:
class
Companion:
class
sealed trait InSubtypeLogic[InSubtype <: In] extends Product with Serializable

Translation strategy for a particular input subtype

Translation strategy for a particular input subtype

Companion:
object

Types

type InSubtype <: In

Value members

Abstract methods

def areSubtypesEqual[A : <none>, B : <none>]: Boolean

Check is A =:= B in a platform-independent code

Check is A =:= B in a platform-independent code

Platform-specific way of parsing In data

Platform-specific way of parsing In data

Should:

  • obtain a lift of subtypes OR enumeration values
  • form it into EnumData[In]

Platform-specific way of parsing Out data

Platform-specific way of parsing Out data

Should:

  • obtain a lift of subtypes OR enumeration values
  • form it into EnumData[In]
def generateEnumCode(generatorData: EnumGeneratorData): DerivationResult[Expr[Pipe[In, Out]]]

Platform-specific way of generating code from resolved information

Platform-specific way of generating code from resolved information

For subtype input should generate code like:

pipeDerivation.lift { (in: In, ctx: pipeDerivation.Context) =>
 in match {
   case inSubtype: In.Foo => pipeDerivation.unlift(fooPipe, inSubtype, updateContext(ctx, path))
   case inSubtype: In.Bar => pipeDerivation.unlift(barPipe, inSubtype, updateContext(ctx, path))
 }
}
def isADT[A : <none>]: Boolean

True iff A is sealed

True iff A is sealed

Concrete methods

final def isSumType[A : <none>]: Boolean
final def isUsableAsSumTypeConversion: Boolean

Whether both In and Out are ADTs/Java Enums

Whether both In and Out are ADTs/Java Enums