Skip to content

[elm] failed to generate map from object with additionalProperties #1140

@mxinden

Description

@mxinden
Description

I am trying to generate an elm client based on an OpenAPI spec (see below). The spec contains a map (labelSet) represented as an object with the additionalProperties field and no properties field like described in the swagger docs.

Generating the client with the command mentioned below generates an invalid LabelSet.elm file.

openapi-generator version
$ docker run openapitools/openapi-generator-cli:latest version

3.3.0-SNAPSHOT

Image ID: acde33bd7281

OpenAPI declaration file content or url
---

swagger: '2.0'

info:
  version: 0.0.1
  title: Alertmanager API
  description: API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager)
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html

consumes:
  - "application/json"
produces:
  - "application/json"

paths:
  /alerts:
    get:
      operationId: xxx
      description: xxx
      parameters:
      responses:
        '200':
          description: xxx
          schema:
            type: array
            items:
              '$ref': '#/definitions/alert'
definitions:
  alert:
    type: object
    properties:
      labels:
        $ref: '#/definitions/labelSet'
  labelSet:
    type: object
    additionalProperties:
      type: string
Invalid output file

LabelSet.elm:

{-
   Alertmanager API
   API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager)

   OpenAPI spec version: 0.0.1

   NOTE: This file is auto generated by the openapi-generator.
   https://github.com/openapitools/openapi-generator.git
   Do not edit this file manually.
-}


module Data.LabelSet exposing (LabelSet, labelSetDecoder, labelSetEncoder)

import Json.Decode as Decode exposing (Decoder)
import Json.Decode.Pipeline exposing (optional, required)
import Json.Encode as Encode
import Maybe exposing (map, withDefault)


type alias LabelSet =
    {     }


labelSetDecoder : Decoder LabelSet
labelSetDecoder =
    Decode.succeed LabelSet



labelSetEncoder : LabelSet -> Encode.Value
labelSetEncoder model =
    Encode.object
        ]
Command line used for generation
docker run --user=1000:1000 --rm -v /home/mxinden/go/src/github.com/prometheus/alertmanager/ui/app/../..:/local openapitools/openapi-generator-cli:latest generate \                                                                                                             
        -i /local/api/v2/openapi.yaml\
        -g elm \
        --version \
        -o /local/ui/app/./openapi-STca4PUI5T
Steps to reproduce

Running elm format on the above LabelSet.elm file results in:

-- SYNTAX PROBLEM ---------------------------------------- src/Data/LabelSet.elm

I ran into something unexpected when parsing your code!

34elm-format: <stderr>: hPutChar: invalid argument (invalid character)
make: *** [Makefile:24: format] Error 1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions