Open
Description
Describe the solution you'd like
SDKs need to support a payload wrapper called "raw value" that is just a payload but it is passed through the conversion stage (but still applies to codec). Specifically, SDKs need to:
- Have a
RawValue
class/wrapper/whatever that only has a single payload in it and nothing else - Ignore traditional payload conversion in either direction if this type is in use (needs to be in composite payload converter to ignore so it works even for customized forms, TBD in Go/Java whether codec wrappers need to skip payload converter)
- If possible (so not Go/Java), expose payload converter without codec to activity context and workflow context so it can be used on these raw values as the activity/workflow author see fit
This is useful for a couple of use cases:
- Dynamic things ([Feature Request] Support dynamic workflows, activities, signals, queries, and updates in all SDKs #201) since the activity/workflow author may not know what type they want to deserialize until runtime
- Built-in queries (Built-in query responses should use "RawValue" #604) like
__temporal_workflow_metadata
where we still want the response subject to codecs but not to conversion
Per-SDK Tickets
- Go - Add RawValue type sdk-go#1231
- Java - Support "RawValue" non-converted values sdk-java#2425
- Core - N/A
- TypeScript - [Feature Request] Support "RawValue" non-converted values sdk-typescript#1629
- Python - Already supported
- .NET - Already supported
- Ruby - Already supported
- PHP - [Feature Request] Support "RawValue" non-converted values sdk-php#574
- Temporal CLI - N/A