Skip to content

Commit f80c26b

Browse files
committed
support requiredMode
1 parent 92989a4 commit f80c26b

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed

src/main/scala/com/github/swagger/enumeratum/converter/SwaggerEnumeratumModelConverter.scala

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
package com.github.swagger.enumeratum.converter
22

33
import java.util.Iterator
4-
import com.github.swagger.scala.converter.AnnotatedTypeForOption
4+
import com.github.swagger.scala.converter.{AnnotatedTypeForOption, SwaggerScalaModelConverter}
55
import enumeratum.{Enum, EnumEntry}
66
import io.swagger.v3.core.converter._
77
import io.swagger.v3.core.jackson.ModelResolver
88
import io.swagger.v3.core.util.{Json, PrimitiveType}
99
import io.swagger.v3.oas.annotations.Parameter
10-
import io.swagger.v3.oas.annotations.media.Schema.AccessMode
11-
import io.swagger.v3.oas.annotations.media.{Schema => SchemaAnnotation}
10+
import io.swagger.v3.oas.annotations.media.Schema.{AccessMode, RequiredMode}
11+
import io.swagger.v3.oas.annotations.media.{ArraySchema, Schema => SchemaAnnotation}
1212
import io.swagger.v3.oas.models.media.Schema
1313

14+
import java.lang.annotation.Annotation
15+
1416
class SwaggerEnumeratumModelConverter extends ModelResolver(Json.mapper()) {
1517
private val enumEntryClass = classOf[EnumEntry]
1618

17-
def noneIfEmpty(s: String): Option[String] = Option(s).filter(_.trim.nonEmpty)
19+
private def noneIfEmpty(s: String): Option[String] = Option(s).filter(_.trim.nonEmpty)
1820

1921
override def resolve(annotatedType: AnnotatedType, context: ModelConverterContext, chain: Iterator[ModelConverter]): Schema[_] = {
2022
val javaType = _mapper.constructType(annotatedType.getType)
@@ -84,11 +86,43 @@ class SwaggerEnumeratumModelConverter extends ModelResolver(Json.mapper()) {
8486

8587
private def getRequiredSettings(annotatedType: AnnotatedType): Seq[Boolean] = annotatedType match {
8688
case _: AnnotatedTypeForOption => Seq.empty
87-
case _ => {
88-
nullSafeList(annotatedType.getCtxAnnotations).collect {
89-
case p: Parameter => p.required()
90-
case s: SchemaAnnotation => s.required()
89+
case _ => getRequiredSettings(nullSafeList(annotatedType.getCtxAnnotations))
90+
}
91+
92+
private def getRequiredSettings(annotations: Seq[Annotation]): Seq[Boolean] = {
93+
val flags = annotations.collect {
94+
case p: Parameter => if (p.required()) RequiredMode.REQUIRED else RequiredMode.NOT_REQUIRED
95+
case s: SchemaAnnotation => {
96+
if (s.requiredMode() == RequiredMode.AUTO) {
97+
if (s.required()) {
98+
RequiredMode.REQUIRED
99+
} else if (SwaggerScalaModelConverter.isRequiredBasedOnAnnotation) {
100+
RequiredMode.NOT_REQUIRED
101+
} else {
102+
RequiredMode.AUTO
103+
}
104+
} else {
105+
s.requiredMode()
106+
}
91107
}
108+
case a: ArraySchema => {
109+
if (a.arraySchema().requiredMode() == RequiredMode.AUTO) {
110+
if (a.arraySchema().required()) {
111+
RequiredMode.REQUIRED
112+
} else if (SwaggerScalaModelConverter.isRequiredBasedOnAnnotation) {
113+
RequiredMode.NOT_REQUIRED
114+
} else {
115+
RequiredMode.AUTO
116+
}
117+
} else {
118+
a.arraySchema().requiredMode()
119+
}
120+
}
121+
}
122+
flags.flatMap {
123+
case RequiredMode.REQUIRED => Some(true)
124+
case RequiredMode.NOT_REQUIRED => Some(false)
125+
case _ => None
92126
}
93127
}
94128

0 commit comments

Comments
 (0)