0

私は次のタイプを持っています:

data Device = Device { _deviceId    :: DeviceId
                     , _deviceName  :: Text
                     , _deviceDtype :: DType }
            deriving (Show, Eq, Generic)
makeFields ''Device
$(deriveJSON (mkOptions "_device") ''Device)

ここでは、JSON 表現のフィールドの名前をこのデータ型に適合させる必要があるためderiveJSON、メカニズムの代わりにを使用します。Generic

-- | Make JSON conversion options.
mkOptions :: String -> Options
mkOptions prefix = defaultOptions { fieldLabelModifier = removePrefix prefix
                                  , unwrapUnaryRecords = True
                                  }

接頭辞は、型のレンズを生成するために必要ですが、JSON 表現では必要ありません。

今、私はのインスタンスを必要とするservant-swaggerを使用して、Swagger ドキュメントを生成しようとしています。ここでの問題は、生成されたスキーマが上記のアクセサ関数の指定された接頭辞付きの名前 ( 、、) を持つことです。代わりに、変更されたバージョン ( 、、および) が必要です。ToSchemaDevice_deviceId_deviceName_deviceDTypeidnamedtype

そのような方法で一般的な派生プロセスをカスタマイズする方法はありますか?

4

1 に答える 1

4

servant-swaggerandにはあまり慣れていませんswagger2が、次のようなものが機能するようです。

import Data.Swagger.Schema
import Data.Swagger.SchemaOptions

instance ToSchema Device where
  declareNamedSchema =
    genericDeclareNamedSchema
      defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> ...}
于 2017-04-17T15:02:02.673 に答える