FlatBuffers.jl icon indicating copy to clipboard operation
FlatBuffers.jl copied to clipboard

How to retrieve value from Union

Open sptrakesh opened this issue 3 years ago • 0 comments
trafficstars

Hello,

Pardon my ignorance, trying Julia for the first time. I am trying to write a client for a TCP service I have in C++. I am trying to figure out how to extract the appropriate value from a union type in the response.

The IDL for the response can be viewed here

The Julia generated structures for the responses look like the following:

FlatBuffers.@with_kw mutable struct Response{A}
    value_type::UInt8 = 0
    value::A = nothing
end

struct ResultVariantKeyValueResults end
ResultVariantKeyValueResults(args...; kwargs...) = KeyValueResults(args...; kwargs...)

struct ResultVariantSuccess end
ResultVariantSuccess(args...; kwargs...) = Success(args...; kwargs...)

FlatBuffers.@UNION(ResultVariant, (
    Nothing,
    ResultVariantKeyValueResults,
    ResultVariantSuccess,
))

FlatBuffers.@with_kw mutable struct KeyValueResults{A}
    value::Vector{A} = []
end

FlatBuffers.@with_kw mutable struct KeyValueResult{A}
    key::String = ""
    value_type::UInt8 = 0
    value::A = nothing
end

FlatBuffers.@with_kw mutable struct Success
    value::Bool = false
end

I can connect to the TCP server, and submit a FB request. I get the FB response back, which is as defined in the IDL linked above. The response from the server once deserialised prints out the following expected structure:

┌ Info: Response{Union{Nothing, ResultVariantKeyValueResults, ResultVariantSuccess}}
│   value_type: UInt8 0x02
└   value: ResultVariantSuccess ResultVariantSuccess()

I am trying to figure out how I can convert the ResultVariantSuccess into the Success structure (or for the case of ResultVariantKeyValueResults into KeyValueResults). In the C++ code, there are value_as methods, which allow me to extract the proper data structures from the unions. I do not see anything similar in the FlatBuffers.jl file (at least did not see anything that looked similar).

Thanks in advance for any help in resolving the issue. Rakesh

sptrakesh avatar Nov 17 '22 20:11 sptrakesh