예제 #1
0
func (rr *retrieveResult) collectFields(rval reflect.Value, fields []string, content *types.ObjectContent) []types.ManagedObjectReference {
	var refs []types.ManagedObjectReference

	for _, name := range fields {
		val, err := fieldValue(rval, name)
		if err == nil {
			if rr.recurse[name] {
				refs = append(refs, fieldRefs(val)...)
			}

			prop := types.DynamicProperty{
				Name: name,
				Val:  val,
			}

			content.PropSet = append(content.PropSet, prop)
			continue
		}

		switch err {
		case errEmptyField:
			// ok
		case errMissingField:
			content.MissingSet = append(content.MissingSet, types.MissingProperty{
				Path: name,
				Fault: types.LocalizedMethodFault{Fault: &types.InvalidProperty{
					Name: name,
				}},
			})
		}
	}

	return refs
}