def join[T]()

in neo4j/src/main/scala/magnolify/neo4j/ValueType.scala [66:99]


  def join[T](caseClass: CaseClass[Typeclass, T]): ValueField[T] = {
    if (caseClass.isValueClass) {
      val p = caseClass.parameters.head
      val tc = p.typeclass
      new ValueField[T] {
        override def from(v: Value)(cm: CaseMapper): T = caseClass.construct(_ => tc.from(v)(cm))
        override def to(v: T)(cm: CaseMapper): Value = tc.to(p.dereference(v))(cm)
      }
    } else {
      new Record[T] {
        override def from(v: Value)(cm: CaseMapper): T =
          caseClass.construct { p =>
            val field = cm.map(p.label)
            try {
              p.typeclass.from(v.get(field))(cm)
            } catch {
              case e: ValueException =>
                throw new RuntimeException(s"Failed to decode $field: ${e.getMessage}", e)
            }
          }

        override def to(v: T)(cm: CaseMapper): Value = {
          val jmap = caseClass.parameters
            .foldLeft(Map.newBuilder[String, AnyRef]) { (m, p) =>
              m += cm.map(p.label) -> p.typeclass.to(p.dereference(v))(cm)
              m
            }
            .result()
            .asJava
          Values.value(jmap)
        }
      }
    }
  }