Как создать сгенерированные объекты в бесформенном - PullRequest
0 голосов
/ 02 ноября 2018

Предположим, у меня есть нормализованная модель базы данных для универсального типа, которая выглядит следующим образом:

case class BaseModel(id: String, 
                     createdBy: String,
                     attr1: Option[String] = None,
                     attr2: Option[Int] = None, 
                     attr3: Option[LocalDate] = None)

Учитывая последовательность BaseModel, если все поля определенного атрибута Option не заполнены, может ли бесформенное создать уменьшенную модель для меня?

Например, предположим, что все поля attr1 пусты. Без необходимости указывать объект перед рукой может ли бесформенный создать общий объект, который выглядит следующим образом?

case class BaseModel(id: String, 
                     createdBy: String,
                     attr2: Option[Int] = None, 
                     attr3: Option[LocalDate] = None)

1 Ответ

0 голосов
/ 03 ноября 2018

Что Shapeless может сделать, учитывая два класса case, создать объект одного из них из объекта другого.

import java.time.LocalDate
import shapeless.LabelledGeneric
import shapeless.record._

case class BaseModel(id: String,
                     createdBy: String,
                     attr1: Option[String] = None,
                     attr2: Option[Int] = None,
                     attr3: Option[LocalDate] = None)

case class BaseModel1(id: String,
                      createdBy: String,
                      attr2: Option[Int] = None,
                      attr3: Option[LocalDate] = None)

val bm = BaseModel(
  id = "cff4545gvgf", 
  createdBy = "John Doe", 
  attr2 = Some(42), 
  attr3 = Some(LocalDate.parse("2018-11-03"))
)  // BaseModel(cff4545gvgf,John Doe,None,Some(42),Some(2018-11-03))
val hlist = LabelledGeneric[BaseModel].to(bm)
val hlist1 = hlist - 'attr1
val bm1 = LabelledGeneric[BaseModel1].from(hlist1)    
   // BaseModel1(cff4545gvgf,John Doe,Some(42),Some(2018-11-03))

Но Shapeless не может создать новый класс case. Если вам нужно, чтобы новый класс дел создавался автоматически, вы можете написать макрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...