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

Update protobuf #450

Merged
merged 1 commit into from
May 7, 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
11 changes: 9 additions & 2 deletions core/src/main/scala/besom/internal/FeatureSupport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ package besom.internal

import pulumirpc.resource.SupportsFeatureRequest

case class FeatureSupport(keepResources: Boolean, keepOutputValues: Boolean, deletedWith: Boolean, aliasSpecs: Boolean)
case class FeatureSupport(
keepResources: Boolean,
keepOutputValues: Boolean,
deletedWith: Boolean,
aliasSpecs: Boolean,
transforms: Boolean
)

object FeatureSupport:
def apply(monitor: Monitor): Result[FeatureSupport] =
Expand All @@ -11,4 +17,5 @@ object FeatureSupport:
keepOutputValues <- monitor.supportsFeature(SupportsFeatureRequest("outputValues")).map(_.hasSupport)
deletedWith <- monitor.supportsFeature(SupportsFeatureRequest("deletedWith")).map(_.hasSupport)
aliasSpecs <- monitor.supportsFeature(SupportsFeatureRequest("aliasSpecs")).map(_.hasSupport)
yield FeatureSupport(keepResources, keepOutputValues, deletedWith, aliasSpecs)
transforms <- monitor.supportsFeature(SupportsFeatureRequest("transforms")).map(_.hasSupport)
yield FeatureSupport(keepResources, keepOutputValues, deletedWith, aliasSpecs, transforms)
22 changes: 18 additions & 4 deletions core/src/main/scala/besom/internal/Monitor.scala
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
package besom.internal

import besom.util.NonEmptyString
import pulumirpc.callback.Callback
import pulumirpc.resource.ResourceMonitorGrpc.ResourceMonitorStub
import pulumirpc.resource.*
import pulumirpc.provider.CallRequest
import pulumirpc.resource.{
ReadResourceRequest,
ReadResourceResponse,
RegisterResourceOutputsRequest,
RegisterResourceRequest,
RegisterResourceResponse,
ResourceCallRequest,
ResourceInvokeRequest,
SupportsFeatureRequest,
SupportsFeatureResponse
}
import pulumirpc.provider.CallResponse
import pulumirpc.provider.InvokeResponse

trait Monitor:
def call(callRequest: CallRequest): Result[CallResponse]
def call(callRequest: ResourceCallRequest): Result[CallResponse]
def invoke(invokeRequest: ResourceInvokeRequest): Result[InvokeResponse]
def readResource(readResourceRequest: ReadResourceRequest): Result[ReadResourceResponse]
def registerResource(registerResourceRequest: RegisterResourceRequest): Result[RegisterResourceResponse]
def registerResourceOutputs(registerResourceOutputsRequest: RegisterResourceOutputsRequest): Result[Unit]
def supportsFeature(supportsFeatureRequest: SupportsFeatureRequest): Result[SupportsFeatureResponse]
def registerStackTransform(callback: Callback): Result[Unit]
def close(): Result[Unit]

class MonitorImpl(private val stub: ResourceMonitorStub, private val closeFn: () => Result[Unit]) extends Monitor:

def call(callRequest: CallRequest): Result[CallResponse] = Result.deferFuture(stub.call(callRequest))
def call(callRequest: ResourceCallRequest): Result[CallResponse] = Result.deferFuture(stub.call(callRequest))

def invoke(invokeRequest: ResourceInvokeRequest): Result[InvokeResponse] =
Result.deferFuture(stub.invoke(invokeRequest))
Expand All @@ -35,6 +46,9 @@ class MonitorImpl(private val stub: ResourceMonitorStub, private val closeFn: ()
def supportsFeature(supportsFeatureRequest: SupportsFeatureRequest): Result[SupportsFeatureResponse] =
Result.deferFuture(stub.supportsFeature(supportsFeatureRequest))

override def registerStackTransform(request: Callback): Result[Unit] =
Result.deferFuture(stub.registerStackTransform(request)).void

def close(): Result[Unit] = closeFn()

object Monitor:
Expand Down
49 changes: 12 additions & 37 deletions core/src/main/scala/besom/internal/ResourceOps.scala
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package besom.internal

import com.google.protobuf.struct.*
import pulumirpc.resource.*
import pulumirpc.resource.RegisterResourceRequest.PropertyDependencies
import besom.util.*
import besom.types.*
import besom.internal.logging.*
import pulumirpc.provider.InvokeResponse
import pulumirpc.resource.{ReadResourceRequest, RegisterResourceOutputsRequest, RegisterResourceRequest, ResourceInvokeRequest}

// TODO remove
import scala.annotation.unused
Expand Down Expand Up @@ -112,7 +112,7 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
resource: Resource,
opts: InvokeOptions
): Output[R] =
???
??? // TODO: https://github.com/VirtusLab/besom/issues/367

private[internal] def executeInvoke(tok: FunctionToken, invokeArgs: SerializationResult, opts: InvokeOptions): Result[Value] =
def buildInvokeRequest(args: Struct, provider: Option[String], version: Option[String]): Result[ResourceInvokeRequest] =
Expand Down Expand Up @@ -438,33 +438,6 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
remote: Boolean
): Result[Either[Throwable, RawResourceResult]] =
ctx.registerTask {
// X `type`: _root_.scala.Predef.String = "",
// X name: _root_.scala.Predef.String = "",
// X parent: _root_.scala.Predef.String = "",
// X custom: _root_.scala.Boolean = false,
// X `object`: _root_.scala.Option[com.google.protobuf.struct.Struct] = _root_.scala.None,
// X protect: _root_.scala.Boolean = false,
// X dependencies: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
// X provider: _root_.scala.Predef.String = "",
// X propertyDependencies: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, pulumirpc.resource.RegisterResourceRequest.PropertyDependencies] = _root_.scala.collection.immutable.Map.empty,
// X deleteBeforeReplace: _root_.scala.Boolean = false,
// X version: _root_.scala.Predef.String = "",
// X ignoreChanges: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
// X acceptSecrets: _root_.scala.Boolean = false,
// X additionalSecretOutputs: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
// N @scala.deprecated(message="Marked as deprecated in proto file", "") urnAliases: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
// X importId: _root_.scala.Predef.String = "",
// X customTimeouts: _root_.scala.Option[pulumirpc.resource.RegisterResourceRequest.CustomTimeouts] = _root_.scala.None,
// X deleteBeforeReplaceDefined: _root_.scala.Boolean = false,
// X supportsPartialValues: _root_.scala.Boolean = false,
// X remote: _root_.scala.Boolean = false,
// X acceptResources: _root_.scala.Boolean = false,
// X providers: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.scala.Predef.String] = _root_.scala.collection.immutable.Map.empty,
// X replaceOnChanges: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
// X pluginDownloadURL: _root_.scala.Predef.String = "",
// X retainOnDelete: _root_.scala.Boolean = false,
// X aliases: _root_.scala.Seq[pulumirpc.resource.Alias] = _root_.scala.Seq.empty,
// unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
Result
.defer {
RegisterResourceRequest(
Expand All @@ -479,7 +452,7 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
providers = inputs.providerRefs,
propertyDependencies = inputs.depUrns.allDepsByProperty.map { case (key, value) =>
key -> PropertyDependencies(value.toList.map(_.asString))
}.toMap,
},
deleteBeforeReplaceDefined = true,
deleteBeforeReplace = inputs.options match
case CustomResolvedResourceOptions(_, _, deleteBeforeReplace, _, _) => deleteBeforeReplace
Expand All @@ -488,7 +461,7 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
version = inputs.options.version.getOrElse(""), // protobuf expects empty string and not null
ignoreChanges = inputs.options.ignoreChanges,
acceptSecrets = true, // our implementation supports secrets from day one
acceptResources = ctx.runInfo.acceptResources,
acceptResources = ctx.runInfo.acceptResources, // our implementation supports resources from day one
additionalSecretOutputs = inputs.options match
case CustomResolvedResourceOptions(_, _, _, additionalSecretOutputs, _) => additionalSecretOutputs
case _ => Vector.empty
Expand All @@ -500,7 +473,7 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
,
aliases = inputs.aliases.map { alias =>
pulumirpc.alias.Alias(pulumirpc.alias.Alias.Alias.Urn(alias))
}.toList,
},
remote = remote,
customTimeouts = Some(
RegisterResourceRequest.CustomTimeouts(
Expand All @@ -511,8 +484,10 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
),
pluginDownloadURL = inputs.options.pluginDownloadUrl.getOrElse(""),
retainOnDelete = inputs.options.retainOnDelete,
supportsPartialValues = false, // TODO partial values
deletedWith = inputs.deletedWithUrn.getOrElse(URN.empty).asString
supportsPartialValues = false, // TODO: https://github.com/VirtusLab/besom/issues/480
supportsResultReporting = false, // TODO: https://github.com/VirtusLab/besom/issues/481
deletedWith = inputs.deletedWithUrn.getOrElse(URN.empty).asString,
transforms = Seq.empty // TODO: https://github.com/VirtusLab/besom/issues/413
)
}
.flatMap { req =>
Expand Down Expand Up @@ -556,16 +531,16 @@ class ResourceOps(using ctx: Context, mdc: BesomMDC[Label]):
@unused typ: ResourceType,
@unused resourceOptions: ResolvedResourceOptions
): Result[List[Unit]] =
Result.pure(List.empty) // TODO parent transformations
Result.pure(List.empty) // TODO parent transformations: https://github.com/VirtusLab/besom/issues/42

private[internal] def applyTransformations(
resourceOptions: ResolvedResourceOptions,
@unused parentTransformations: List[Unit] // TODO this needs transformations from ResourceState, not Resource
): Result[ResolvedResourceOptions] =
Result.pure(resourceOptions) // TODO resource transformations
Result.pure(resourceOptions) // TODO resource transformations: https://github.com/VirtusLab/besom/issues/42

private[internal] def collapseAliases(@unused opts: ResolvedResourceOptions): Result[List[Output[String]]] =
Result.pure(List.empty) // TODO aliases
Result.pure(List.empty) // TODO aliases: https://github.com/VirtusLab/besom/issues/44

private[internal] def mergeProviders(typ: String, opts: ResolvedResourceOptions, resources: Resources): Result[Providers] =
def getParentProviders = opts.parent match
Expand Down
152 changes: 152 additions & 0 deletions core/src/main/scala/besom/rpc/pulumirpc/callback/Callback.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
// Generated by the Scala Plugin for the Protocol Buffer Compiler.
// Do not edit!
//
// Protofile syntax: PROTO3

package pulumirpc.callback

/** @param target
* the gRPC target of the callback service.
* @param token
* the service specific unique token for this callback.
*/
@SerialVersionUID(0L)
final case class Callback(
target: _root_.scala.Predef.String = "",
token: _root_.scala.Predef.String = "",
unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Callback] {
@transient
private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
private[this] def __computeSerializedSize(): _root_.scala.Int = {
var __size = 0

{
val __value = target
if (!__value.isEmpty) {
__size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
}
};

{
val __value = token
if (!__value.isEmpty) {
__size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
}
};
__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 = target
if (!__v.isEmpty) {
_output__.writeString(1, __v)
}
};
{
val __v = token
if (!__v.isEmpty) {
_output__.writeString(2, __v)
}
};
unknownFields.writeTo(_output__)
}
def withTarget(__v: _root_.scala.Predef.String): Callback = copy(target = __v)
def withToken(__v: _root_.scala.Predef.String): Callback = copy(token = __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 = target
if (__t != "") __t else null
}
case 2 => {
val __t = token
if (__t != "") __t else null
}
}
}
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.PString(target)
case 2 => _root_.scalapb.descriptors.PString(token)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
def companion: pulumirpc.callback.Callback.type = pulumirpc.callback.Callback
// @@protoc_insertion_point(GeneratedMessage[pulumirpc.Callback])
}

object Callback extends scalapb.GeneratedMessageCompanion[pulumirpc.callback.Callback] {
implicit def messageCompanion: scalapb.GeneratedMessageCompanion[pulumirpc.callback.Callback] = this
def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): pulumirpc.callback.Callback = {
var __target: _root_.scala.Predef.String = ""
var __token: _root_.scala.Predef.String = ""
var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
var _done__ = false
while (!_done__) {
val _tag__ = _input__.readTag()
_tag__ match {
case 0 => _done__ = true
case 10 =>
__target = _input__.readStringRequireUtf8()
case 18 =>
__token = _input__.readStringRequireUtf8()
case tag =>
if (_unknownFields__ == null) {
_unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
}
_unknownFields__.parseField(tag, _input__)
}
}
pulumirpc.callback.Callback(
target = __target,
token = __token,
unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
)
}
implicit def messageReads: _root_.scalapb.descriptors.Reads[pulumirpc.callback.Callback] = _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.")
pulumirpc.callback.Callback(
target = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
token = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
)
case _ => throw new RuntimeException("Expected PMessage")
}
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = CallbackProto.javaDescriptor.getMessageTypes().get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = CallbackProto.scalaDescriptor.messages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
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 = pulumirpc.callback.Callback(
target = "",
token = ""
)
implicit class CallbackLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, pulumirpc.callback.Callback]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, pulumirpc.callback.Callback](_l) {
def target: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.target)((c_, f_) => c_.copy(target = f_))
def token: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.token)((c_, f_) => c_.copy(token = f_))
}
final val TARGET_FIELD_NUMBER = 1
final val TOKEN_FIELD_NUMBER = 2
def of(
target: _root_.scala.Predef.String,
token: _root_.scala.Predef.String
): _root_.pulumirpc.callback.Callback = _root_.pulumirpc.callback.Callback(
target,
token
)
// @@protoc_insertion_point(GeneratedMessageCompanion[pulumirpc.Callback])
}
Loading
Loading