in src/arraytypes/map.jl [53:83]
function arrowvector(::MapKind, x, i, nl, fi, de, ded, meta; largelists::Bool=false, kw...)
len = length(x)
validity = ValidityBitmap(x)
ET = eltype(x)
DT = Base.nonmissingtype(ET)
KDT, VDT = keytype(DT), valtype(DT)
ArrowTypes.concrete_or_concreteunion(KDT) || throw(
ArgumentError(
"`keytype(d)` must be concrete to serialize map-like `d`, but `keytype(d) == $KDT`",
),
)
ArrowTypes.concrete_or_concreteunion(VDT) || throw(
ArgumentError(
"`valtype(d)` must be concrete to serialize map-like `d`, but `valtype(d) == $VDT`",
),
)
KT = KeyValue{KDT,VDT}
VT = Vector{KT}
T = DT !== ET ? Union{Missing,VT} : VT
flat = ToList(T[keyvalues(KT, y) for y in x]; largelists=largelists)
offsets = Offsets(UInt8[], flat.inds)
data = arrowvector(flat, i, nl + 1, fi, de, ded, nothing; largelists=largelists, kw...)
K, V = keyvaluetypes(eltype(data))
return Map{withmissing(ET, Dict{K,V}),eltype(flat.inds),typeof(data)}(
validity,
offsets,
data,
len,
meta,
)
end