code: func MetaToTableRow(obj runtime.Object, rowFn func(obj runtime.Object, m metav1.Object, name, age string) ([]interface{}, error)) ([]metav1beta1.TableRow, error) {
  	if meta.IsListType(obj) {
  		rows := make([]metav1beta1.TableRow, 0, 16)
  		err := meta.EachListItem(obj, func(obj runtime.Object) error {
  			nestedRows, err := MetaToTableRow(obj, rowFn)
  			if err != nil {
  				return err
  			}
  			rows = append(rows, nestedRows...)
  			return nil
  		})
  		if err != nil {
  			return nil, err
  		}
  		return rows, nil
  	}
  
  	rows := make([]metav1beta1.TableRow, 0, 1)
  	m, err := meta.Accessor(obj)
  	if err != nil {
  		return nil, err
  	}
  	row := metav1beta1.TableRow{
  		Object: runtime.RawExtension{Object: obj},
  	}
  	row.Cells, err = rowFn(obj, m, m.GetName(), ConvertToHumanReadableDateType(m.GetCreationTimestamp()))
  	if err != nil {
  		return nil, err
  	}
  	rows = append(rows, row)
  	return rows, nil
  }
docs: // MetaToTableRow converts a list or object into one or more table rows. The provided rowFn is invoked for
  // each accessed item, with name and age being passed to each.