Полагаю, ваша проблема в том, что вы хотите иметь возможность сопоставлять карту с картой, полученной с parseFull()
, но на карте нет unapply
.
Таким образом, вы можете сопоставить шаблон с каждым отдельным значением, предоставив значение по умолчанию, если оно имеет неправильный тип:
val templateText: Option[String] = e("template-text") match {
case s: String => Some(s)
case _ => None
}
Или временно поместите все данные в некоторую структуру, которая может быть сопоставлена с шаблоном:
val data = (e("template-text"), e("template-html"), e("email"), e("data"),
e("blkdata"))
val dependencies: Option[Data] = data match {
case (templateText: String,
templateHtml: String,
blockMaps: Map[String,List[Map[String,String]]],
templateMap: Map[String,String]) =>
Some(new Data(recipient, templateText, templateHtml, blockMaps, templateMap))
case _ => None
}