{-# LANGUAGE MultilineStrings #-}

printf
    """
    instance Aeson.FromJSON %s where
      parseJSON =
        Aeson.withText "%s" $ \\s ->
          either Aeson.parseFail pure $
            parsePrinterOptType (Text.unpack s)

    instance PrinterOptsFieldType %s where
      parsePrinterOptType s =
        case s of
    %s
          _ ->
            Left . unlines $
              [ "unknown value: " <> show s
              , "Valid values are: %s"
              ]

    """
    fieldTypeName
    fieldTypeName
    fieldTypeName
    ( unlines_
        [ printf "      \"%s\" -> Right %s" val con
        | (con, val) <- enumOptions
        ]
    )
    (renderEnumOptions enumOptions)
