diff --git a/document.go b/document.go index addde2b..9994363 100644 --- a/document.go +++ b/document.go @@ -84,6 +84,7 @@ type IDocument interface { markPopulated(field string) markDepopulated(field string) newPopulationMap() + getPopulated() map[string]bool getRaw() any setRaw(raw any) } diff --git a/document_internals.go b/document_internals.go index 991827d..7dc6500 100644 --- a/document_internals.go +++ b/document_internals.go @@ -84,6 +84,14 @@ func serializeIDs(input interface{}, isJson bool, populated map[string]bool, par break } } + if iidoc, ok := input.(IDocument); ok && !ip { + for k1, v1 := range iidoc.getPopulated() { + if k1 == descent || k1 == ft.Name { + ip = v1 + break + } + } + } if terr == nil { ifc, ok := fv.Interface().(HasID) if fv.Kind() == reflect.Slice { @@ -316,6 +324,10 @@ func (d *Document) newPopulationMap() { } } +func (d *Document) getPopulated() map[string]bool { + return d.populatedFields +} + func (d *Document) setRaw(raw any) { d.raw = raw }