生成 LabelledGeneric 时如何访问字段上的注释?
How can you access annotations on a field when generating LabelledGeneric?
有没有办法用有关字段注释的信息来标记生成的无形LabelledGeneric
?
例如
case class Example(@someAnnotation foo: Foo, bar: Bar)
我们能得到类似的东西吗
FieldType["foo" with Annotations(someAnnotation :: HNil), Foo] :: FieldType["bar", Bar] :: HNil
?
您可以使用类型 类 shapeless.LabelledGeneric
、shapeless.Annotations
来拥有 HLists FieldType['foo, Foo] :: FieldType['bar, Bar] :: HNil
和 Some[someAnnotation] :: None.type :: HNil
implicitly[LabelledGeneric.Aux[Example,
FieldType[Witness.`'foo`.T, Foo] :: FieldType[Witness.`'bar`.T, Bar] :: HNil]]
implicitly[Annotations.Aux[someAnnotation, Example,
Some[someAnnotation] :: None.type :: HNil]]
请注意 'foo
、'bar
(由于技术原因写成 Witness.`'foo`.T
、Witness.`'bar`.T
)是单例类型,是 Symbol
的子类型,不是 String
.
如果您确实需要交集 (with
) 或元组 (fieldName, annotation)
的 HList,那么您可以使用 类 shapeless.ops.hlist.Zip
、shapeless.ops.hlist.ZipOne
, shapeless.ops.hlist.ZipWith
.
有没有办法用有关字段注释的信息来标记生成的无形LabelledGeneric
?
例如
case class Example(@someAnnotation foo: Foo, bar: Bar)
我们能得到类似的东西吗
FieldType["foo" with Annotations(someAnnotation :: HNil), Foo] :: FieldType["bar", Bar] :: HNil
?
您可以使用类型 类 shapeless.LabelledGeneric
、shapeless.Annotations
FieldType['foo, Foo] :: FieldType['bar, Bar] :: HNil
和 Some[someAnnotation] :: None.type :: HNil
implicitly[LabelledGeneric.Aux[Example,
FieldType[Witness.`'foo`.T, Foo] :: FieldType[Witness.`'bar`.T, Bar] :: HNil]]
implicitly[Annotations.Aux[someAnnotation, Example,
Some[someAnnotation] :: None.type :: HNil]]
请注意 'foo
、'bar
(由于技术原因写成 Witness.`'foo`.T
、Witness.`'bar`.T
)是单例类型,是 Symbol
的子类型,不是 String
.
如果您确实需要交集 (with
) 或元组 (fieldName, annotation)
的 HList,那么您可以使用 类 shapeless.ops.hlist.Zip
、shapeless.ops.hlist.ZipOne
, shapeless.ops.hlist.ZipWith
.