JSON 库“Circe”有一个配置参数
transformConstructorNames: String => String
,它允许您转换任何类的名称。
貘有类似的东西吗?
原因是 Tapir 的
Schema.derived[OpenAPISealedTrait]
效果很好,但我想从层次结构中的每个类中删除“OpenAPI”部分。
例如,如果我有
sealed trait OpenAPIShape
case class OpenAPISquare(size: Int) extends OpenAPIShape
case class OpenAPICircle(radius: Int) extends OpenAPIShape
我希望能够使用一些配置来编写
Schema.derived[OpenAPIShape]
,从每个生成的架构的标题/名称中删除“OpenAPI”。因此,在 yaml 中,名称为 Square
、Circle
和 Shape
。
这可能吗? (也有可能不必为层次结构中的每个点编写不同的 Schema.driven 吗?)
您可以通过提供隐式
sttp.tapir.generic.Configuration
,以与 circe 编解码器派生非常相似的方式配置 tapir 的模式派生。
在那里,您可以修改
toDiscriminatorValue
成员函数,它允许转换鉴别器值。如果类名用作鉴别符,则这将用于推导。
如果您想避免为每个类编写
Schema.derived
,您可以通过导入sttp.tapir.generic.auto._
来使用自动推导。但是,这可能会对性能产生负面影响。
另请参阅文档,其中涵盖了这两个主题。