in guava/src/main/scala/magnolify/guava/semiauto/FunnelDerivation.scala [28:40]
override def funnel(from: T, into: PrimitiveSink): Unit =
if (caseClass.isValueClass) {
val p = caseClass.parameters.head
p.typeclass.funnel(p.dereference(from), into)
} else if (caseClass.parameters.isEmpty) {
val _ = into.putString(caseClass.typeName.short, StandardCharsets.UTF_8)
} else {
caseClass.parameters.foreach { p =>
// inject index to distinguish cases like `(Some(1), None)` and `(None, Some(1))`
into.putInt(p.index)
p.typeclass.funnel(p.dereference(from), into)
}
}