我有以下类型:
data Device = Device { _deviceId :: DeviceId
, _deviceName :: Text
, _deviceDtype :: DType }
deriving (Show, Eq, Generic)
makeFields ''Device
$(deriveJSON (mkOptions "_device") ''Device)
这里我使用deriveJSON
代替Generic
机制,因为我需要为此数据类型调整 JSON 表示的字段名称:
-- | Make JSON conversion options.
mkOptions :: String -> Options
mkOptions prefix = defaultOptions { fieldLabelModifier = removePrefix prefix
, unwrapUnaryRecords = True
}
需要前缀来为该类型生成镜头,但在 JSON 表示中不需要。
现在我正在尝试使用servant-swaggerToSchema
生成Swagger文档,这需要一个Device
. 现在的问题是生成的模式将具有上述访问器函数的给定前缀名称(_deviceId
、、、_deviceName
)_deviceDType
。相反,我会拥有修改后的版本(id
、name
和dtype
)。
有没有办法以这种方式自定义通用派生过程?