JuliaData / StructTypes.jl

Abstract definitions and convenience methods for describing, processing, and constructing Julia objects
https://juliadata.github.io/StructTypes.jl/stable/
MIT License
79 stars 22 forks source link

constructfrom having a tough time with a bad Union field #77

Closed kshyatt closed 2 years ago

kshyatt commented 2 years ago
julia> struct MyStruct
           a::Vector{Union{String, Vector{Vector{Vector{Float64}}}}}
       end

julia> using StructTypes

julia> StructTypes.StructType(::Type{MyStruct}) = StructTypes.Struct()

julia> x = Dict(:a=>["z"]);

julia> StructTypes.constructfrom(MyStruct, x)
MyStruct(Union{String, Vector{Vector{Vector{Float64}}}}[[[[122.0]]]])
kshyatt commented 2 years ago

Digging a little more, the problem is occuring here: https://github.com/JuliaData/StructTypes.jl/blob/main/src/StructTypes.jl#L911

The issue is that "z" can be parsed as a valid Vector{Vector{Vector{Float64}}} even though it would clearly be better read as a string. The try-catch can't detect this.