转换 Tapir 模式的构造函数名称

问题描述 投票:0回答:1

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 吗?)

scala tapir magnolia-scala
1个回答
0
投票

您可以通过提供隐式

sttp.tapir.generic.Configuration
,以与 circe 编解码器派生非常相似的方式配置 tapir 的模式派生。

在那里,您可以修改

toDiscriminatorValue
成员函数,它允许转换鉴别器值。如果类名用作鉴别符,则这将用于推导。

如果您想避免为每个类编写

Schema.derived
,您可以通过导入
sttp.tapir.generic.auto._
来使用自动推导。但是,这可能会对性能产生负面影响。

另请参阅文档,其中涵盖了这两个主题。

© www.soinside.com 2019 - 2024. All rights reserved.