Skip to content

Complex Type #24

Open
Open
@brasilikum

Description

@brasilikum

I am trying to generate the elm decoder for my jsonresume.

I get the type "ComplexType", which is not defined. What does it mean? Is this JSON to complex for the tool, or is this a bug?

This is the json in question: (resulting elm below)

{
  "basics": {
    "name": "Georg Hartmann",
    "label": "Software Engineer",
    "phone": "",
    "website": "",
    "summary": "",
    "location": {
      "address": "",
      "postalCode": "",
      "city": "",
      "countryCode": "",
      "region": ""
    },
    "profiles": []
  },
  "work": [
    {
      "company": "Q1 Energie AG",
      "position": "Software Engineer",
      "website": "",
      "startDate": "2016-01-01",
      "summary": "zahlz Mobile Payments, Backend, Golang, Go, RESTful Services, Grafana, Monitoring, Docker, Technical Consulting",
      "highlights": [],
      "endDate": "2017-01-01"
    },
    {
      "company": "Georg Hartmann IT-Dienstleistungen",
      "position": "Freiberuflicher Softwareentwickler",
      "website": "",
      "startDate": "2015-04-01",
      "summary": "Design und Implementierung von Backend Services for Mobile Payment in Golang, Technisches Consulting, Web-Entwicklung.",
      "highlights": [],
      "endDate": "2015-12-01"
    },
    {
      "company": "High Performance Computing Laboratory, PUCRS",
      "position": "Praktikant",
      "website": "",
      "startDate": "2014-09-01",
      "summary": "3 Monate Praktikum, 3 Monate schreiben der Bachelorarbeit auf Englisch mit dem Thema: \nUsage Statistics for the clusters with Node.js and MongoDB",
      "highlights": [],
      "endDate": "2015-02-01"
    },
    {
      "company": "Hochschule Osnabrueck (University of Applied Sciences)",
      "position": "Tutor für Mathematik",
      "website": "",
      "startDate": "2014-03-01",
      "summary": "",
      "highlights": [],
      "endDate": "2014-07-01"
    },
    {
      "company": "Recifesites",
      "position": "Praktikant",
      "website": "",
      "startDate": "2012-08-01",
      "summary": "Frontend web development mit HTML, CSS und JS (jQuery)",
      "highlights": [],
      "endDate": "2012-09-01"
    },
    {
      "company": "Grundschule Matancitas",
      "position": "Freiwilliger",
      "website": "",
      "startDate": "2011-03-01",
      "summary": "Freiwilliger in Vollzeit im Rahmen eines Freiwilligen Sozialen Jahres (FSJ)",
      "highlights": [],
      "endDate": "2011-09-01"
    },
    {
      "company": "Barraca da Amizade, Social Project",
      "position": "Freiwilliger",
      "website": "",
      "startDate": "2010-07-01",
      "summary": "Freiwilliger in Vollzeit im Rahmen eines Freiwilligen Sozialen Jahres (FSJ).\nLeitung eines Recycingworkshops",
      "highlights": [],
      "endDate": "2011-02-01"
    }
  ],
  "education": [
    {
      "institution": "Freie Waldorfschule Balingen",
      "area": "",
      "studyType": "Abitur",
      "startDate": "1997-01-01",
      "gpa": "",
      "courses": [],
      "endDate": "2010-01-01"
    },
    {
      "institution": "Hochschule Osnabrück",
      "area": "",
      "studyType": "Bachelor of Science (BS)",
      "startDate": "2012-01-01",
      "gpa": "",
      "courses": [],
      "endDate": "2015-01-01"
    }
  ],
  "skills": [
    {
      "name": "CI",
      "level": "",
      "keywords": []
    },
    {
      "name": "Elm",
      "level": "",
      "keywords": []
    },
    {
      "name": "Web Development",
      "level": "",
      "keywords": []
    },
    {
      "name": "Cascading Style Sheets (CSS)",
      "level": "",
      "keywords": []
    },
    {
      "name": "jQuery",
      "level": "",
      "keywords": []
    },
    {
      "name": "Microsoft Office",
      "level": "",
      "keywords": []
    },
    {
      "name": "MongoDB",
      "level": "",
      "keywords": []
    },
    {
      "name": "Golang",
      "level": "",
      "keywords": []
    },
    {
      "name": "Java",
      "level": "",
      "keywords": []
    },
    {
      "name": "C++",
      "level": "",
      "keywords": []
    },
    {
      "name": "Node.js",
      "level": "",
      "keywords": []
    },
    {
      "name": "JavaScript",
      "level": "",
      "keywords": []
    },
    {
      "name": "HTML 5",
      "level": "",
      "keywords": []
    },
    {
      "name": "Linux",
      "level": "",
      "keywords": []
    },
    {
      "name": "Git",
      "level": "",
      "keywords": []
    },
    {
      "name": "Software Development",
      "level": "",
      "keywords": []
    },
    {
      "name": "MySQL",
      "level": "",
      "keywords": []
    },
    {
      "name": "Representational State Transfer (REST)",
      "level": "",
      "keywords": []
    },
    {
      "name": "Monitoring",
      "level": "",
      "keywords": []
    }
  ],
  "languages": [
    {
      "language": "Spanish",
      "fluency": "Limited working"
    },
    {
      "language": "Portuguese",
      "fluency": "Full professional"
    },
    {
      "language": "French",
      "fluency": "Elementary"
    },
    {
      "language": "German",
      "fluency": "Native or bilingual"
    },
    {
      "language": "English",
      "fluency": "Full professional"
    }
  ]
}

This is the result:

import Json.Encode
import Json.Decode exposing (field)

type alias Something =
    { basics : SomethingBasics
    , work : List ComplexType
    , education : List ComplexType
    , skills : List ComplexType
    , languages : List ComplexType
    }

type alias SomethingBasicsLocation =
    { address : String
    , postalCode : String
    , city : String
    , countryCode : String
    , region : String
    }

type alias SomethingBasics =
    { name : String
    , label : String
    , phone : String
    , website : String
    , summary : String
    , location : SomethingBasicsLocation
    , profiles : List ComplexType
    }

decodeSomething : Json.Decode.Decoder Something
decodeSomething =
    Json.Decode.map5 Something
        (field "basics" decodeSomethingBasics)
        (field "work" Json.Decode.list decodeComplexType)
        (field "education" Json.Decode.list decodeComplexType)
        (field "skills" Json.Decode.list decodeComplexType)
        (field "languages" Json.Decode.list decodeComplexType)

decodeSomethingBasicsLocation : Json.Decode.Decoder SomethingBasicsLocation
decodeSomethingBasicsLocation =
    Json.Decode.map5 SomethingBasicsLocation
        (field "address" Json.Decode.string)
        (field "postalCode" Json.Decode.string)
        (field "city" Json.Decode.string)
        (field "countryCode" Json.Decode.string)
        (field "region" Json.Decode.string)

decodeSomethingBasics : Json.Decode.Decoder SomethingBasics
decodeSomethingBasics =
    Json.Decode.Pipeline.decode SomethingBasics
        |> Json.Decode.Pipeline.required "name" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "label" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "phone" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "website" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "summary" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "location" (decodeSomethingBasicsLocation)
        |> Json.Decode.Pipeline.required "profiles" (Json.Decode.list decodeComplexType)

encodeSomething : Something -> Json.Encode.Value
encodeSomething record =
    Json.Encode.object
        [ ("basics",  encodeSomethingBasics <| record.basics)
        , ("work",  Json.Encode.list <| List.map encodeComplexType <| record.work)
        , ("education",  Json.Encode.list <| List.map encodeComplexType <| record.education)
        , ("skills",  Json.Encode.list <| List.map encodeComplexType <| record.skills)
        , ("languages",  Json.Encode.list <| List.map encodeComplexType <| record.languages)
        ]

encodeSomethingBasicsLocation : SomethingBasicsLocation -> Json.Encode.Value
encodeSomethingBasicsLocation record =
    Json.Encode.object
        [ ("address",  Json.Encode.string <| record.address)
        , ("postalCode",  Json.Encode.string <| record.postalCode)
        , ("city",  Json.Encode.string <| record.city)
        , ("countryCode",  Json.Encode.string <| record.countryCode)
        , ("region",  Json.Encode.string <| record.region)
        ]

encodeSomethingBasics : SomethingBasics -> Json.Encode.Value
encodeSomethingBasics record =
    Json.Encode.object
        [ ("name",  Json.Encode.string <| record.name)
        , ("label",  Json.Encode.string <| record.label)
        , ("phone",  Json.Encode.string <| record.phone)
        , ("website",  Json.Encode.string <| record.website)
        , ("summary",  Json.Encode.string <| record.summary)
        , ("location",  encodeSomethingBasicsLocation <| record.location)
        , ("profiles",  Json.Encode.list <| List.map encodeComplexType <| record.profiles)
        ]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions