Skip to content

Commit

Permalink
Merge pull request #94 from soujiro32167/less-boilerplate
Browse files Browse the repository at this point in the history
Added defaults to reduce boilerplate of creating asyncapi
  • Loading branch information
adamw committed Jul 21, 2023
2 parents 8cefca5 + f74776a commit 31fa52e
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 23 deletions.
66 changes: 46 additions & 20 deletions asyncapi-model/src/main/scala/sttp/apispec/asyncapi/AsyncAPI.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ import sttp.apispec.{
import scala.collection.immutable.ListMap

case class AsyncAPI(
asyncapi: String = "2.0.0",
id: Option[String],
asyncapi: String = "2.6.0",
id: Option[String] = None,
info: Info,
servers: ListMap[String, Server],
channels: ListMap[String, ReferenceOr[ChannelItem]],
components: Option[Components],
tags: List[Tag],
externalDocs: Option[ExternalDocumentation],
servers: ListMap[String, Server] = ListMap.empty,
channels: ListMap[String, ReferenceOr[ChannelItem]] = ListMap.empty,
components: Option[Components] = None,
tags: List[Tag] = Nil,
externalDocs: Option[ExternalDocumentation] = None,
extensions: ListMap[String, ExtensionValue] = ListMap.empty
) {
def id(id: String): AsyncAPI = copy(id = Some(id))
Expand Down Expand Up @@ -71,25 +71,43 @@ case class ServerVariable(
)

case class ChannelItem(
description: Option[String],
subscribe: Option[Operation],
publish: Option[Operation],
parameters: ListMap[String, ReferenceOr[Parameter]],
bindings: List[ChannelBinding],
description: Option[String] = None,
subscribe: Option[Operation] = None,
publish: Option[Operation] = None,
parameters: ListMap[String, ReferenceOr[Parameter]] = ListMap.empty,
bindings: List[ChannelBinding] = Nil,
extensions: ListMap[String, ExtensionValue] = ListMap.empty
)

object ChannelItem {
def empty: ChannelItem =
ChannelItem()

def subscribe(op: Operation): ChannelItem = ChannelItem(subscribe = Some(op))

def publish(op: Operation): ChannelItem = ChannelItem(publish = Some(op))
}


case class Operation(
operationId: Option[String],
summary: Option[String],
description: Option[String],
tags: List[Tag],
externalDocs: Option[ExternalDocumentation],
bindings: List[OperationBinding],
traits: List[OperationTrait],
message: Option[ReferenceOr[Message]],
operationId: Option[String] = None,
summary: Option[String] = None,
description: Option[String] = None,
tags: List[Tag] = Nil,
externalDocs: Option[ExternalDocumentation] = None,
bindings: List[OperationBinding] = Nil,
traits: List[OperationTrait] = Nil,
message: Option[ReferenceOr[Message]] = None,
extensions: ListMap[String, ExtensionValue] = ListMap.empty
)

object Operation {
def empty: Operation = Operation()

def inlineMessage(payload: Message): Operation =
Operation(message = Some(Right(payload)))
}

case class OperationTrait(
operationId: Option[String],
summary: Option[String],
Expand Down Expand Up @@ -139,6 +157,14 @@ case class WebSocketMessageBinding() extends MessageBinding
case class KafkaMessageBinding(key: Option[Schema], bindingVersion: Option[String]) extends MessageBinding

sealed trait Message

object Message {
def singleInline(payload: String, schemaFormat: Option[String] = None): SingleMessage =
SingleMessage(
payload = Some(Left(AnyValue(payload))),
schemaFormat = schemaFormat
)
}
case class OneOfMessage(oneOf: List[SingleMessage]) extends Message
case class SingleMessage(
headers: Option[ReferenceOr[Schema]] = None,
Expand Down
6 changes: 3 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ val scala3Settings = Seq(
val commonSettings = commonSmlBuildSettings ++ ossPublishSettings ++ Seq(
organization := "com.softwaremill.sttp.apispec",
mimaPreviousArtifacts := Set.empty,
versionScheme := Some("semver-spec")
versionScheme := Some("early-semver")
) ++ scala3Settings

val commonJvmSettings = commonSettings ++ Seq(
Expand Down Expand Up @@ -87,9 +87,9 @@ lazy val projectAggregates: Seq[ProjectReference] = if (sys.env.isDefinedAt("STT
val compileAndTest = "compile->compile;test->test"

lazy val rootProject = (project in file("."))
.settings(commonSettings: _*)
.settings(commonSettings*)
.settings(publish / skip := true, name := "sttp-apispec", scalaVersion := scala2_13)
.aggregate(projectAggregates: _*)
.aggregate(projectAggregates*)

lazy val circeTestUtils: ProjectMatrix = (projectMatrix in file("circe-testutils"))
.settings(commonSettings)
Expand Down

0 comments on commit 31fa52e

Please sign in to comment.