If I make a new struct that contains a certain type (a DataFrame in below example) like:
struct StructContainingDataFrame
df::DataFrame
something_else::Any
end
Is it then possible to make this work with all functions that are defined for a DataFrame input. In other words is it possible to get something like this to work:
function fff(x::StructContainingDataFrame) where fff in [DataFrames.nrow, DataFrames.ncol and all other 1d dataframes functions]
fff(x.df)
end
where in the above case I would hope that any function supporting dataframes would also support my new struct.
Guess its only possible, if DataFrames does not rely on duck-typing, i.e., defines an abstract type (or a trait) that you could subtype.
On the other hand, what should those functions do on your new type? If you just forward them as in your example, i.e., fff(x.df), the result would lose your type and something_else immediately after a single call. Thus, you might want to wrap via fff(x::StructContainingDataFrame) = StructContainingDataFrame(fff(x.df), something_else) and would need to redefine every function anyways.
PS: Seems that DataFrames does define AbstractDataFrame, but I don’t know which minimal interface is required to make all other methods defined for AbstractDataFrame work on your type.