Hey all, I'm a bit confused with the semantics around DoFn serialization. I have a model defined like this:
``` type SinkCustomAttributes map[string]string type SinkScan struct { DestinationURLQueryParams SinkCustomAttributes `beam:"destination_url_query_params" db:"destination_url_query_params" json:"destination_url_query_params"` } ``` I figured out pretty fast that I can't use a `map` _directly_ as the result of a DoFn, however a `map` wrapped up in a `struct` worked fine for a batch pipeline. Indeed that definition has been working totally fine for both the prism runner and the dataflow runner for a while now. However when I started in on a streaming pipeline running on prism I got the following error: ``` panic: generating model pipeline failed to add input kind: {main.SourceScanToSinkScanFn 5: ParDo [In(Main): models.SourceScan <- {4: models.SourceScan/R[models.SourceScan] FIX[1s]:unbounded}] -> [Out: models.SinkScan -> {5: models.SinkScan/R[models.SinkScan] FIX[1s]:unbounded}]} caused by: failed to serialize 5: ParDo [In(Main): models.SourceScan <- {4: models.SourceScan/R[models.SourceScan] FIX[1s]:unbounded}] -> [Out: models.SinkScan -> {5: models.SinkScan/R[models.SinkScan] FIX[1s]:unbounded}] caused by: encoding userfn 5: ParDo [In(Main): models.SourceScan <- {4: models.SourceScan/R[models.SourceScan] FIX[1s]:unbounded}] -> [Out: models.SinkScan -> {5: models.SinkScan/R[models.SinkScan] FIX[1s]:unbounded}] bad output type caused by: encoding full type models.SinkScan bad type caused by: encoding struct models.SinkScan bad field type caused by: unencodable type 'map', try to wrap the type as a field in a struct, see https://github.com/apache/beam/issues/23101 for details ``` The error message seems to imply (paradoxically) that the `map` field could not be serialized, and that I can fix it by having it be a field on a struct (it already) is. This begs some questions: 1. Is it OK to have `map` fields on structs in Beam? 2. Are there different serialization semantics between batch and streaming pipelines? There is also a decent chance there is just some subtle bug on my side, but I wanted to check my understanding here. Thanks!