Have you tried struct GeoData <: AbstractDataFrame
? Then all you need to do (assuming there’s a well-defined one) is to implement the basic DataFrame interface your GeoData
type, and all functions that 1) take an AbstractDataFrame
and 2) use the interface should automatically work.
This is how we did it in MetaGraphs.
Also: you might reconsider your GeoData struct:
struct GeoData{T<:AbstractDataFrame} <: AbstractDataFrame
data::T
coordnames::Vector{Symbol}
end
This avoids having an abstract type as a field, which supposedly improves performance.