From 434adfe37154a21a10187623cc4d553e1af63295 Mon Sep 17 00:00:00 2001 From: Leonardo Taglialegne Date: Sun, 19 Jul 2026 09:16:20 +0200 Subject: [PATCH] Support refs in multipart content --- src/OpenApi/Generate.elm | 71 ++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/OpenApi/Generate.elm b/src/OpenApi/Generate.elm index f7808ae..6560dcf 100644 --- a/src/OpenApi/Generate.elm +++ b/src/OpenApi/Generate.elm @@ -1970,39 +1970,46 @@ multipartContent mediaType = CliMonad.fail "Missing schema" Just schema -> - SchemaUtils.schemaToType [] (OpenApi.Schema.get schema) - |> CliMonad.andThen - (\{ type_ } -> - case type_ of - Common.Object { fields } -> - fields - |> List.map - (\( fieldName, field ) -> - { name = fieldName - , required = field.required - , part = - case field.type_ of - Common.Basic Common.String { format } -> - case format of - Just "binary" -> - BytesPart - - _ -> - StringPart - - Common.Bytes -> - BytesPart - - _ -> - JsonPart field.type_ - } - ) - |> MultipartContent - |> CliMonad.succeed + let + finishMultipart : { type_ : Common.Type, documentation : Maybe String } -> CliMonad ContentSchema + finishMultipart { type_ } = + case type_ of + Common.Object { fields } -> + fields + |> List.map + (\( fieldName, field ) -> + { name = fieldName + , required = field.required + , part = + case field.type_ of + Common.Basic Common.String { format } -> + case format of + Just "binary" -> + BytesPart + + _ -> + StringPart + + Common.Bytes -> + BytesPart + + _ -> + JsonPart field.type_ + } + ) + |> MultipartContent + |> CliMonad.succeed - _ -> - CliMonad.fail ("Schema with a type of " ++ SchemaUtils.typeToString type_ ++ " not supported") - ) + Common.Ref ref -> + SchemaUtils.getSchema ref + |> CliMonad.andThen (SchemaUtils.schemaToType []) + |> CliMonad.andThen finishMultipart + + _ -> + CliMonad.fail ("Schema with a type of " ++ SchemaUtils.typeToString type_ ++ " not supported") + in + SchemaUtils.schemaToType [] (OpenApi.Schema.get schema) + |> CliMonad.andThen finishMultipart toConfigParamAnnotation :