Skip to content

Commit

Permalink
split rpc from core
Browse files Browse the repository at this point in the history
  • Loading branch information
lbialy committed Sep 25, 2024
1 parent 31b2b1f commit 586c1f4
Show file tree
Hide file tree
Showing 100 changed files with 25,981 additions and 9 deletions.
29 changes: 22 additions & 7 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,20 @@ build-packages-for-templates-and-examples:
grep -hr "0.3-SNAPSHOT" examples/**/*.scala templates/**/*.scala | sed -n 's/.*besom-\([^:]*:[^"]*\).*-core.0.3-SNAPSHOT.*/\1/p' | sort -u | tr '\n' ' ' | xargs -I {} just cli packages local {}

# Cleans everything
clean-all: clean-json clean-sdk clean-auto clean-out clean-compiler-plugin clean-codegen clean-scripts clean-test-integration clean-cfg clean-test-templates clean-test-examples clean-test-markdown
clean-all: clean-json clean-rpc clean-sdk clean-auto clean-out clean-compiler-plugin clean-codegen clean-scripts clean-test-integration clean-cfg clean-test-templates clean-test-examples clean-test-markdown

# Compiles everything
compile-all: compile-json compile-sdk compile-auto compile-codegen compile-scripts compile-compiler-plugin build-language-plugin
compile-all: compile-json compile-rpc compile-sdk compile-auto compile-codegen compile-scripts compile-compiler-plugin build-language-plugin

# Tests everything
test-all: test-json test-sdk test-auto test-codegen test-scripts test-integration build-packages-for-templates-and-examples test-templates test-examples test-markdown

# Publishes everything locally
publish-local-all: publish-local-json publish-local-sdk publish-local-auto publish-local-codegen publish-local-scripts install-language-plugin
publish-local-all: publish-local-json publish-local-rpc publish-local-sdk publish-local-auto publish-local-codegen publish-local-scripts install-language-plugin

# Publishes everything to Maven
# TODO add publish-maven-auto once stable
publish-maven-all: publish-maven-json publish-maven-sdk publish-maven-codegen publish-maven-scripts
publish-maven-all: publish-maven-json publish-maven-rpc publish-maven-sdk publish-maven-codegen publish-maven-scripts

# Runs all necessary checks before committing
before-commit: compile-all test-all
Expand All @@ -66,7 +66,7 @@ before-commit: compile-all test-all
####################

# Compiles core besom SDK
compile-core: publish-local-json
compile-core: publish-local-json publish-local-rpc
scala-cli --power compile {{no-bloop-ci}} core --suppress-experimental-feature-warning

# Compiles besom cats-effect extension
Expand Down Expand Up @@ -109,7 +109,7 @@ publish-local-sdk: publish-local-core publish-local-cats publish-local-zio publi
publish-maven-sdk: publish-maven-core publish-maven-cats publish-maven-zio publish-maven-compiler-plugin

# Publishes locally core besom SDK
publish-local-core: publish-local-json
publish-local-core: publish-local-json publish-local-rpc
scala-cli --power publish local {{no-bloop-ci}} core --project-version {{besom-version}} --suppress-experimental-feature-warning

# Publishes locally besom cats-effect extension
Expand Down Expand Up @@ -167,6 +167,22 @@ clean-out:
clean-coverage: clean-sdk
rm -rf {{coverage-output-dir}}

####################
# RPC
####################

compile-rpc:
scala-cli --power compile {{no-bloop-ci}} besom-rpc --suppress-experimental-feature-warning

clean-rpc:
scala-cli --power clean {{no-bloop-ci}} besom-rpc --suppress-experimental-feature-warning

publish-local-rpc:
scala-cli --power publish local {{no-bloop-ci}} besom-rpc --project-version {{besom-version}} --suppress-experimental-feature-warning

publish-maven-rpc:
scala-cli --power publish {{no-bloop-ci}} besom-rpc --project-version {{besom-version}} {{publish-maven-auth-options}} --suppress-experimental-feature-warning

####################
# Json
####################
Expand All @@ -191,7 +207,6 @@ publish-local-json:
publish-maven-json:
scala-cli --power publish {{no-bloop-ci}} besom-json --project-version {{besom-version}} {{publish-maven-auth-options}} --suppress-experimental-feature-warning


####################
# Auto
####################
Expand Down
18 changes: 18 additions & 0 deletions besom-rpc/project.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//> using scala 3.3.3

//> using options "-java-output-version:11"

// TODO dependency bumps
//> using dep "com.google.protobuf:protobuf-java-util:3.25.1"
//> using dep "com.thesamet.scalapb::scalapb-runtime:0.11.15"
//> using dep "com.thesamet.scalapb::scalapb-runtime-grpc:0.11.15"

//> using publish.name "besom-rpc"
//> using publish.organization "org.virtuslab"
//> using publish.url "https://github.com/VirtusLab/besom"
//> using publish.vcs "github:VirtusLab/besom"
//> using publish.license "Apache-2.0"
//> using publish.repository "central"
//> using publish.developer "lbialy|Łukasz Biały|https://github.com/lbialy"
//> using publish.developer "prolativ|Michał Pałka|https://github.com/prolativ"
//> using repository sonatype:snapshots
243 changes: 243 additions & 0 deletions besom-rpc/src/main/scala/com/google/rpc/status/Status.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
// Generated by the Scala Plugin for the Protocol Buffer Compiler.
// Do not edit!
//
// Protofile syntax: PROTO3

package com.google.rpc.status

/** The `Status` type defines a logical error model that is suitable for different
* programming environments, including REST APIs and RPC APIs. It is used by
* [gRPC](https://github.com/grpc). The error model is designed to be:
*
* - Simple to use and understand for most users
* - Flexible enough to meet unexpected needs
*
* # Overview
*
* The `Status` message contains three pieces of data: error code, error message,
* and error details. The error code should be an enum value of
* [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The
* error message should be a developer-facing English message that helps
* developers *understand* and *resolve* the error. If a localized user-facing
* error message is needed, put the localized message in the error details or
* localize it in the client. The optional error details may contain arbitrary
* information about the error. There is a predefined set of error detail types
* in the package `google.rpc` which can be used for common error conditions.
*
* # Language mapping
*
* The `Status` message is the logical representation of the error model, but it
* is not necessarily the actual wire format. When the `Status` message is
* exposed in different client libraries and different wire protocols, it can be
* mapped differently. For example, it will likely be mapped to some exceptions
* in Java, but more likely mapped to some error codes in C.
*
* # Other uses
*
* The error model and the `Status` message can be used in a variety of
* environments, either with or without APIs, to provide a
* consistent developer experience across different environments.
*
* Example uses of this error model include:
*
* - Partial errors. If a service needs to return partial errors to the client,
* it may embed the `Status` in the normal response to indicate the partial
* errors.
*
* - Workflow errors. A typical workflow has multiple steps. Each step may
* have a `Status` message for error reporting purpose.
*
* - Batch operations. If a client uses batch request and batch response, the
* `Status` message should be used directly inside batch response, one for
* each error sub-response.
*
* - Asynchronous operations. If an API call embeds asynchronous operation
* results in its response, the status of those operations should be
* represented directly using the `Status` message.
*
* - Logging. If some API errors are stored in logs, the message `Status` could
* be used directly after any stripping needed for security/privacy reasons.
*
* @param code
* The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
* @param message
* A developer-facing error message, which should be in English. Any
* user-facing error message should be localized and sent in the
* [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
* @param details
* A list of messages that carry the error details. There will be a
* common set of message types for APIs to use.
*/
@SerialVersionUID(0L)
final case class Status(
code: _root_.scala.Int = 0,
message: _root_.scala.Predef.String = "",
details: _root_.scala.Seq[com.google.protobuf.any.Any] = _root_.scala.Seq.empty,
unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Status] {
@transient
private var __serializedSizeMemoized: _root_.scala.Int = 0
private def __computeSerializedSize(): _root_.scala.Int = {
var __size = 0

{
val __value = code
if (__value != 0) {
__size += _root_.com.google.protobuf.CodedOutputStream.computeInt32Size(1, __value)
}
};

{
val __value = message
if (!__value.isEmpty) {
__size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
}
};
details.foreach { __item =>
val __value = __item
__size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
}
__size += unknownFields.serializedSize
__size
}
override def serializedSize: _root_.scala.Int = {
var __size = __serializedSizeMemoized
if (__size == 0) {
__size = __computeSerializedSize() + 1
__serializedSizeMemoized = __size
}
__size - 1

}
def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
{
val __v = code
if (__v != 0) {
_output__.writeInt32(1, __v)
}
};
{
val __v = message
if (!__v.isEmpty) {
_output__.writeString(2, __v)
}
};
details.foreach { __v =>
val __m = __v
_output__.writeTag(3, 2)
_output__.writeUInt32NoTag(__m.serializedSize)
__m.writeTo(_output__)
};
unknownFields.writeTo(_output__)
}
def withCode(__v: _root_.scala.Int): Status = copy(code = __v)
def withMessage(__v: _root_.scala.Predef.String): Status = copy(message = __v)
def clearDetails = copy(details = _root_.scala.Seq.empty)
def addDetails(__vs: com.google.protobuf.any.Any *): Status = addAllDetails(__vs)
def addAllDetails(__vs: Iterable[com.google.protobuf.any.Any]): Status = copy(details = details ++ __vs)
def withDetails(__v: _root_.scala.Seq[com.google.protobuf.any.Any]): Status = copy(details = __v)
def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
(__fieldNumber: @_root_.scala.unchecked) match {
case 1 => {
val __t = code
if (__t != 0) __t else null
}
case 2 => {
val __t = message
if (__t != "") __t else null
}
case 3 => details
}
}
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
_root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
case 1 => _root_.scalapb.descriptors.PInt(code)
case 2 => _root_.scalapb.descriptors.PString(message)
case 3 => _root_.scalapb.descriptors.PRepeated(details.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
def companion: com.google.rpc.status.Status.type = com.google.rpc.status.Status
// @@protoc_insertion_point(GeneratedMessage[google.rpc.Status])
}

object Status extends scalapb.GeneratedMessageCompanion[com.google.rpc.status.Status] {
implicit def messageCompanion: scalapb.GeneratedMessageCompanion[com.google.rpc.status.Status] = this
def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): com.google.rpc.status.Status = {
var __code: _root_.scala.Int = 0
var __message: _root_.scala.Predef.String = ""
val __details: _root_.scala.collection.immutable.VectorBuilder[com.google.protobuf.any.Any] = new _root_.scala.collection.immutable.VectorBuilder[com.google.protobuf.any.Any]
var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
var _done__ = false
while (!_done__) {
val _tag__ = _input__.readTag()
_tag__ match {
case 0 => _done__ = true
case 8 =>
__code = _input__.readInt32()
case 18 =>
__message = _input__.readStringRequireUtf8()
case 26 =>
__details += _root_.scalapb.LiteParser.readMessage[com.google.protobuf.any.Any](_input__)
case tag =>
if (_unknownFields__ == null) {
_unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
}
_unknownFields__.parseField(tag, _input__)
}
}
com.google.rpc.status.Status(
code = __code,
message = __message,
details = __details.result(),
unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
)
}
implicit def messageReads: _root_.scalapb.descriptors.Reads[com.google.rpc.status.Status] = _root_.scalapb.descriptors.Reads{
case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
_root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
com.google.rpc.status.Status(
code = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Int]).getOrElse(0),
message = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
details = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Seq[com.google.protobuf.any.Any]]).getOrElse(_root_.scala.Seq.empty)
)
case _ => throw new RuntimeException("Expected PMessage")
}
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = StatusProto.javaDescriptor.getMessageTypes().get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = StatusProto.scalaDescriptor.messages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[?] = {
var __out: _root_.scalapb.GeneratedMessageCompanion[?] = null
(__number: @_root_.scala.unchecked) match {
case 3 => __out = com.google.protobuf.any.Any
}
__out
}
lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[? <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[?] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = com.google.rpc.status.Status(
code = 0,
message = "",
details = _root_.scala.Seq.empty
)
implicit class StatusLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, com.google.rpc.status.Status]) extends _root_.scalapb.lenses.MessageLens[UpperPB, com.google.rpc.status.Status](_l) {
def code: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.code)((c_, f_) => c_.copy(code = f_))
def message: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.message)((c_, f_) => c_.copy(message = f_))
def details: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[com.google.protobuf.any.Any]] = field(_.details)((c_, f_) => c_.copy(details = f_))
}
final val CODE_FIELD_NUMBER = 1
final val MESSAGE_FIELD_NUMBER = 2
final val DETAILS_FIELD_NUMBER = 3
def of(
code: _root_.scala.Int,
message: _root_.scala.Predef.String,
details: _root_.scala.Seq[com.google.protobuf.any.Any]
): _root_.com.google.rpc.status.Status = _root_.com.google.rpc.status.Status(
code,
message,
details
)
// @@protoc_insertion_point(GeneratedMessageCompanion[google.rpc.Status])
}
36 changes: 36 additions & 0 deletions besom-rpc/src/main/scala/com/google/rpc/status/StatusProto.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Generated by the Scala Plugin for the Protocol Buffer Compiler.
// Do not edit!
//
// Protofile syntax: PROTO3

package com.google.rpc.status

object StatusProto extends _root_.scalapb.GeneratedFileObject {
lazy val dependencies: Seq[_root_.scalapb.GeneratedFileObject] = Seq(
com.google.protobuf.any.AnyProto
)
lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[? <: _root_.scalapb.GeneratedMessage]] =
Seq[_root_.scalapb.GeneratedMessageCompanion[? <: _root_.scalapb.GeneratedMessage]](
com.google.rpc.status.Status
)
private lazy val ProtoBytes: _root_.scala.Array[Byte] =
scalapb.Encoding.fromBase64(scala.collection.immutable.Seq(
"""Chxnb29nbGUvcHJvdG9idWYvc3RhdHVzLnByb3RvEgpnb29nbGUucnBjGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIo0BC
gZTdGF0dXMSHQoEY29kZRgBIAEoBUIJ4j8GEgRjb2RlUgRjb2RlEiYKB21lc3NhZ2UYAiABKAlCDOI/CRIHbWVzc2FnZVIHbWVzc
2FnZRI8CgdkZXRhaWxzGAMgAygLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUIM4j8JEgdkZXRhaWxzUgdkZXRhaWxzQl4KDmNvbS5nb
29nbGUucnBjQgtTdGF0dXNQcm90b1ABWjdnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL3JwYy9zdGF0dXM7c
3RhdHVzogIDUlBDYgZwcm90bzM="""
).mkString)
lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = {
val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes)
_root_.scalapb.descriptors.FileDescriptor.buildFrom(scalaProto, dependencies.map(_.scalaDescriptor))
}
lazy val javaDescriptor: com.google.protobuf.Descriptors.FileDescriptor = {
val javaProto = com.google.protobuf.DescriptorProtos.FileDescriptorProto.parseFrom(ProtoBytes)
com.google.protobuf.Descriptors.FileDescriptor.buildFrom(javaProto, _root_.scala.Array(
com.google.protobuf.any.AnyProto.javaDescriptor
))
}
@deprecated("Use javaDescriptor instead. In a future version this will refer to scalaDescriptor.", "ScalaPB 0.5.47")
def descriptor: com.google.protobuf.Descriptors.FileDescriptor = javaDescriptor
}
Loading

0 comments on commit 586c1f4

Please sign in to comment.