Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

W-15425041: support HTTP binding versions 0.1.0, 0.2.0, and 0.3.0 #1987

Merged
merged 5 commits into from
May 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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