Skip to content

Commit

Permalink
Merge pull request #1987 from aml-org/W-15425051
Browse files Browse the repository at this point in the history
W-15425041: support HTTP binding versions 0.1.0, 0.2.0, and 0.3.0
  • Loading branch information
arielmirra authored May 13, 2024
2 parents 82456b6 + 508e137 commit 8fab076
Show file tree
Hide file tree
Showing 52 changed files with 1,293 additions and 455 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
package amf.apicontract.client.platform.model.domain.bindings.http

import amf.apicontract.client.platform.model.domain.bindings.{BindingHeaders, BindingVersion, MessageBinding}
import amf.core.client.platform.model.StrField
import amf.core.client.platform.model.{IntField, StrField}
import amf.core.client.platform.model.domain.Shape
import amf.apicontract.client.scala.model.domain.bindings.http.{HttpMessageBinding => InternalHttpMessageBinding}
import amf.apicontract.client.scala.model.domain.bindings.http.{
HttpMessageBinding => InternalHttpMessageBinding,
HttpMessageBinding020 => InternalHttpMessageBinding020,
HttpMessageBinding030 => InternalHttpMessageBinding030
}
import amf.apicontract.internal.convert.ApiClientConverters._

import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel}

@JSExportAll
case class HttpMessageBinding(override private[amf] val _internal: InternalHttpMessageBinding)
abstract class HttpMessageBinding(override private[amf] val _internal: InternalHttpMessageBinding)
extends MessageBinding
with BindingVersion
with BindingHeaders {

@JSExportTopLevel("HttpMessageBinding")
def this() = this(InternalHttpMessageBinding())
override protected def bindingVersion: StrField = _internal.bindingVersion
override def withBindingVersion(bindingVersion: String): this.type = {
_internal.withBindingVersion(bindingVersion)
Expand All @@ -28,6 +30,27 @@ case class HttpMessageBinding(override private[amf] val _internal: InternalHttpM
_internal.withHeaders(headers)
this
}
}

@JSExportAll
case class HttpMessageBinding020(override private[amf] val _internal: InternalHttpMessageBinding020)
extends HttpMessageBinding(_internal) {
@JSExportTopLevel("HttpMessageBinding020")
def this() = this(InternalHttpMessageBinding020())
override def linkCopy(): HttpMessageBinding020 = _internal.linkCopy()
}

@JSExportAll
case class HttpMessageBinding030(override private[amf] val _internal: InternalHttpMessageBinding030)
extends HttpMessageBinding(_internal) {
@JSExportTopLevel("HttpMessageBinding030")
def this() = this(InternalHttpMessageBinding030())

def statusCode: IntField = _internal.statusCode
def withStatusCode(statusCode: Int): this.type = {
_internal.withStatusCode(statusCode)
this
}

override def linkCopy(): HttpMessageBinding = _internal.linkCopy()
override def linkCopy(): HttpMessageBinding030 = _internal.linkCopy()
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,23 @@ package amf.apicontract.client.platform.model.domain.bindings.http
import amf.apicontract.client.platform.model.domain.bindings.{BindingVersion, OperationBinding}
import amf.core.client.platform.model.StrField
import amf.core.client.platform.model.domain.Shape
import amf.apicontract.client.scala.model.domain.bindings.http.{HttpOperationBinding => InternalHttpOperationBinding}
import amf.apicontract.client.scala.model.domain.bindings.http.{
HttpOperationBinding => InternalHttpOperationBinding,
HttpOperationBinding010 => InternalHttpOperationBinding010,
HttpOperationBinding020 => InternalHttpOperationBinding020
}
import amf.apicontract.internal.convert.ApiClientConverters._

import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel}

@JSExportAll
case class HttpOperationBinding(override private[amf] val _internal: InternalHttpOperationBinding)
abstract class HttpOperationBinding(override private[amf] val _internal: InternalHttpOperationBinding)
extends OperationBinding
with BindingVersion {
@JSExportTopLevel("HttpOperationBinding")
def this() = this(InternalHttpOperationBinding())

def operationType: StrField = _internal.operationType
def method: StrField = _internal.method
def query: Shape = _internal.query
def method: StrField = _internal.method
def query: Shape = _internal.query

def withOperationType(`type`: String): this.type = {
_internal.withOperationType(`type`)
this
}
def withMethod(method: String): this.type = {
_internal.withMethod(method)
this
Expand All @@ -36,6 +33,29 @@ case class HttpOperationBinding(override private[amf] val _internal: InternalHtt
_internal.withBindingVersion(bindingVersion)
this
}
}

@JSExportAll
case class HttpOperationBinding010(override private[amf] val _internal: InternalHttpOperationBinding010)
extends HttpOperationBinding(_internal) {
@JSExportTopLevel("HttpOperationBinding010")
def this() = this(InternalHttpOperationBinding010())

def operationType: StrField = _internal.operationType

def withOperationType(`type`: String): this.type = {
_internal.withOperationType(`type`)
this
}

override def linkCopy(): HttpOperationBinding010 = _internal.linkCopy()
}

@JSExportAll
case class HttpOperationBinding020(override private[amf] val _internal: InternalHttpOperationBinding020)
extends HttpOperationBinding(_internal) {
@JSExportTopLevel("HttpOperationBinding020")
def this() = this(InternalHttpOperationBinding020())

override def linkCopy(): HttpOperationBinding = _internal.linkCopy()
override def linkCopy(): HttpOperationBinding020 = _internal.linkCopy()
}
Original file line number Diff line number Diff line change
@@ -1,38 +1,72 @@
package amf.apicontract.client.scala.model.domain.bindings.http
import amf.core.client.scala.model.StrField
import amf.core.client.scala.model.{IntField, StrField}
import amf.core.client.scala.model.domain.{DomainElement, Linkable}
import amf.core.internal.metamodel.Field
import amf.core.internal.parser.domain.{Annotations, Fields}
import amf.apicontract.internal.metamodel.domain.bindings.HttpMessageBindingModel
import amf.apicontract.internal.metamodel.domain.bindings.{
HttpMessageBinding020Model,
HttpMessageBinding030Model,
HttpMessageBindingModel
}
import amf.apicontract.internal.metamodel.domain.bindings.HttpMessageBindingModel._
import amf.apicontract.client.scala.model.domain.bindings.{BindingHeaders, BindingVersion, MessageBinding}
import amf.shapes.client.scala.model.domain.Key

class HttpMessageBinding(override val fields: Fields, override val annotations: Annotations)
abstract class HttpMessageBinding(override val fields: Fields, override val annotations: Annotations)
extends MessageBinding
with BindingVersion
with BindingHeaders
with Key {
override def meta: HttpMessageBindingModel.type = HttpMessageBindingModel

override def key: StrField = fields.field(HttpMessageBindingModel.key)

override def key: StrField = fields.field(HttpMessageBindingModel.key)
override def componentId: String = "/http-message"

override protected def bindingVersionField: Field = BindingVersion
override protected def headersField: Field = Headers
}

override def linkCopy(): HttpMessageBinding = HttpMessageBinding().withId(id)
class HttpMessageBinding020(override val fields: Fields, override val annotations: Annotations)
extends HttpMessageBinding(fields, annotations) {
override def meta: HttpMessageBinding020Model.type = HttpMessageBinding020Model

override def componentId: String = "/http-message-020"

override def linkCopy(): HttpMessageBinding020 = HttpMessageBinding020().withId(id)

override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement =
HttpMessageBinding.apply
HttpMessageBinding020.apply
}

object HttpMessageBinding020 {
def apply(): HttpMessageBinding020 = apply(Annotations())

def apply(annotations: Annotations): HttpMessageBinding020 = apply(Fields(), annotations)

def apply(fields: Fields, annotations: Annotations): HttpMessageBinding020 =
new HttpMessageBinding020(fields, annotations)
}

object HttpMessageBinding {
class HttpMessageBinding030(override val fields: Fields, override val annotations: Annotations)
extends HttpMessageBinding(fields, annotations) {
override def meta: HttpMessageBinding030Model.type = HttpMessageBinding030Model

override def componentId: String = "/http-message-030"

override def linkCopy(): HttpMessageBinding030 = HttpMessageBinding030().withId(id)

def statusCode: IntField = fields.field(HttpMessageBinding030Model.StatusCode)
def withStatusCode(statusCode: Int): this.type = {
set(HttpMessageBinding030Model.StatusCode, statusCode)
}

override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement =
HttpMessageBinding030.apply
}

def apply(): HttpMessageBinding = apply(Annotations())
object HttpMessageBinding030 {
def apply(): HttpMessageBinding030 = apply(Annotations())

def apply(annotations: Annotations): HttpMessageBinding = apply(Fields(), annotations)
def apply(annotations: Annotations): HttpMessageBinding030 = apply(Fields(), annotations)

def apply(fields: Fields, annotations: Annotations): HttpMessageBinding = new HttpMessageBinding(fields, annotations)
def apply(fields: Fields, annotations: Annotations): HttpMessageBinding030 =
new HttpMessageBinding030(fields, annotations)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,71 @@ import amf.core.client.scala.model.StrField
import amf.core.client.scala.model.domain.{DomainElement, Linkable, Shape}
import amf.core.internal.metamodel.Field
import amf.core.internal.parser.domain.{Annotations, Fields}
import amf.apicontract.internal.metamodel.domain.bindings.HttpOperationBindingModel
import amf.apicontract.internal.metamodel.domain.bindings.{
HttpOperationBinding010Model,
HttpOperationBinding020Model,
HttpOperationBindingModel
}
import amf.apicontract.internal.metamodel.domain.bindings.HttpOperationBindingModel._
import amf.apicontract.client.scala.model.domain.bindings.{BindingVersion, OperationBinding}
import amf.shapes.client.scala.model.domain.Key

class HttpOperationBinding(override val fields: Fields, override val annotations: Annotations)
abstract class HttpOperationBinding(override val fields: Fields, override val annotations: Annotations)
extends OperationBinding
with BindingVersion
with Key {
override def key: StrField = fields.field(HttpOperationBindingModel.key)
override protected def bindingVersionField: Field = BindingVersion
override def componentId: String = "/http-operation"

override def key: StrField = fields.field(HttpOperationBindingModel.key)
def method: StrField = fields.field(Method)
def query: Shape = fields.field(Query)

def method: StrField = fields.field(Method)
def query: Shape = fields.field(Query)
def operationType: StrField = fields.field(OperationType)
def withMethod(method: String): this.type = set(Method, method)
def withQuery(query: Shape): this.type = set(Query, query)
}

override protected def bindingVersionField: Field = BindingVersion
override def meta: HttpOperationBindingModel.type = HttpOperationBindingModel
class HttpOperationBinding010(override val fields: Fields, override val annotations: Annotations)
extends HttpOperationBinding(fields, annotations) {
override def componentId: String = "/http-operation-010"

def withOperationType(`type`: String): this.type = set(OperationType, `type`)
def withMethod(method: String): this.type = set(Method, method)
def withQuery(query: Shape): this.type = set(Query, query)
def operationType: StrField = fields.field(HttpOperationBinding010Model.OperationType)
def withOperationType(`type`: String): this.type = set(HttpOperationBinding010Model.OperationType, `type`)

override def componentId: String = "/http-operation"
override def meta: HttpOperationBinding010Model.type = HttpOperationBinding010Model

override def linkCopy(): HttpOperationBinding = HttpOperationBinding().withId(id)
override def linkCopy(): HttpOperationBinding010 = HttpOperationBinding010().withId(id)

override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement =
HttpOperationBinding.apply
HttpOperationBinding010.apply
}

object HttpOperationBinding {
object HttpOperationBinding010 {
def apply(): HttpOperationBinding010 = apply(Annotations())

def apply(annotations: Annotations): HttpOperationBinding010 = apply(Fields(), annotations)

def apply(fields: Fields, annotations: Annotations): HttpOperationBinding010 =
new HttpOperationBinding010(fields, annotations)
}

class HttpOperationBinding020(override val fields: Fields, override val annotations: Annotations)
extends HttpOperationBinding(fields, annotations) {
override def componentId: String = "/http-operation-020"

override def meta: HttpOperationBinding020Model.type = HttpOperationBinding020Model

override def linkCopy(): HttpOperationBinding020 = HttpOperationBinding020().withId(id)

override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement =
HttpOperationBinding020.apply
}

def apply(): HttpOperationBinding = apply(Annotations())
object HttpOperationBinding020 {
def apply(): HttpOperationBinding020 = apply(Annotations())

def apply(annotations: Annotations): HttpOperationBinding = apply(Fields(), annotations)
def apply(annotations: Annotations): HttpOperationBinding020 = apply(Fields(), annotations)

def apply(fields: Fields, annotations: Annotations): HttpOperationBinding =
new HttpOperationBinding(fields, annotations)
def apply(fields: Fields, annotations: Annotations): HttpOperationBinding020 =
new HttpOperationBinding020(fields, annotations)
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,11 @@ trait ApiBaseConverter
with Amqp091OperationBinding030Converter
with EmptyBindingConverter
with HttpMessageBindingConverter
with HttpMessageBinding020Converter
with HttpMessageBinding030Converter
with HttpOperationBindingConverter
with HttpOperationBinding010Converter
with HttpOperationBinding020Converter
with KafkaMessageBindingConverter
with KafkaMessageBinding010Converter
with KafkaMessageBinding030Converter
Expand Down Expand Up @@ -261,6 +265,22 @@ trait HttpMessageBindingConverter extends PlatformSecrets {
override def asInternal(from: domain.bindings.http.HttpMessageBinding): HttpMessageBinding = from._internal
}
}
trait HttpMessageBinding020Converter extends PlatformSecrets {
implicit object HttpMessageBinding020Matcher
extends BidirectionalMatcher[HttpMessageBinding020, domain.bindings.http.HttpMessageBinding020] {
override def asClient(from: HttpMessageBinding020): domain.bindings.http.HttpMessageBinding020 =
platform.wrap[domain.bindings.http.HttpMessageBinding020](from)
override def asInternal(from: domain.bindings.http.HttpMessageBinding020): HttpMessageBinding020 = from._internal
}
}
trait HttpMessageBinding030Converter extends PlatformSecrets {
implicit object HttpMessageBinding030Matcher
extends BidirectionalMatcher[HttpMessageBinding030, domain.bindings.http.HttpMessageBinding030] {
override def asClient(from: HttpMessageBinding030): domain.bindings.http.HttpMessageBinding030 =
platform.wrap[domain.bindings.http.HttpMessageBinding030](from)
override def asInternal(from: domain.bindings.http.HttpMessageBinding030): HttpMessageBinding030 = from._internal
}
}
trait HttpOperationBindingConverter extends PlatformSecrets {
implicit object HttpOperationBindingMatcher
extends BidirectionalMatcher[HttpOperationBinding, domain.bindings.http.HttpOperationBinding] {
Expand All @@ -269,6 +289,24 @@ trait HttpOperationBindingConverter extends PlatformSecrets {
override def asInternal(from: domain.bindings.http.HttpOperationBinding): HttpOperationBinding = from._internal
}
}
trait HttpOperationBinding010Converter extends PlatformSecrets {
implicit object HttpOperationBinding010Matcher
extends BidirectionalMatcher[HttpOperationBinding010, domain.bindings.http.HttpOperationBinding010] {
override def asClient(from: HttpOperationBinding010): domain.bindings.http.HttpOperationBinding010 =
platform.wrap[domain.bindings.http.HttpOperationBinding010](from)
override def asInternal(from: domain.bindings.http.HttpOperationBinding010): HttpOperationBinding010 =
from._internal
}
}
trait HttpOperationBinding020Converter extends PlatformSecrets {
implicit object HttpOperationBinding020Matcher
extends BidirectionalMatcher[HttpOperationBinding020, domain.bindings.http.HttpOperationBinding020] {
override def asClient(from: HttpOperationBinding020): domain.bindings.http.HttpOperationBinding020 =
platform.wrap[domain.bindings.http.HttpOperationBinding020](from)
override def asInternal(from: domain.bindings.http.HttpOperationBinding020): HttpOperationBinding020 =
from._internal
}
}
trait KafkaMessageBindingConverter extends PlatformSecrets {
implicit object KafkaMessageBindingMatcher
extends BidirectionalMatcher[KafkaMessageBinding, domain.bindings.kafka.KafkaMessageBinding] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,11 +258,19 @@ private[amf] object ApiRegister extends UniqueInitializer with PlatformSecrets {
case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091OperationBinding030 =>
Amqp091OperationBinding030(s)
}
platform.registerWrapper(HttpMessageBindingModel) {
case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpMessageBinding => HttpMessageBinding(s)
platform.registerWrapper(HttpMessageBinding020Model) {
case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpMessageBinding020 => HttpMessageBinding020(s)
}
platform.registerWrapper(HttpOperationBindingModel) {
case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpOperationBinding => HttpOperationBinding(s)
platform.registerWrapper(HttpMessageBinding030Model) {
case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpMessageBinding030 => HttpMessageBinding030(s)
}
platform.registerWrapper(HttpOperationBinding010Model) {
case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpOperationBinding010 =>
HttpOperationBinding010(s)
}
platform.registerWrapper(HttpOperationBinding020Model) {
case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpOperationBinding020 =>
HttpOperationBinding020(s)
}
platform.registerWrapper(KafkaMessageBinding010Model) {
case s: amf.apicontract.client.scala.model.domain.bindings.kafka.KafkaMessageBinding010 =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,11 @@ private[amf] object APIEntities extends Entities {
ChannelBindingModel,
EmptyBindingModel,
HttpOperationBindingModel,
HttpOperationBinding010Model,
HttpOperationBinding020Model,
HttpMessageBindingModel,
HttpMessageBinding020Model,
HttpMessageBinding030Model,
KafkaOperationBindingModel,
KafkaMessageBindingModel,
KafkaMessageBinding010Model,
Expand Down
Loading

0 comments on commit 8fab076

Please sign in to comment.