code: func logDryRunAction(action core.Action, w io.Writer, marshalFunc MarshalFunc) {
  
  	group := action.GetResource().Group
  	if len(group) == 0 {
  		group = "core"
  	}
  	fmt.Fprintf(w, "[dryrun] Would perform action %s on resource %q in API group \"%s/%s\"\n", strings.ToUpper(action.GetVerb()), action.GetResource().Resource, group, action.GetResource().Version)
  
  	namedAction, ok := action.(actionWithName)
  	if ok {
  		fmt.Fprintf(w, "[dryrun] Resource name: %q\n", namedAction.GetName())
  	}
  
  	objAction, ok := action.(actionWithObject)
  	if ok && objAction.GetObject() != nil {
  		// Print the marshalled object with a tab indentation
  		objBytes, err := marshalFunc(objAction.GetObject(), action.GetResource().GroupVersion())
  		if err == nil {
  			fmt.Println("[dryrun] Attached object:")
  			PrintBytesWithLinePrefix(w, objBytes, "\t")
  		}
  	}
  
  	patchAction, ok := action.(core.PatchAction)
  	if ok {
  		// Replace all occurrences of \" with a simple " when printing
  		fmt.Fprintf(w, "[dryrun] Attached patch:\n\t%s\n", strings.Replace(string(patchAction.GetPatch()), `\"`, `"`, -1))
  	}
  }
docs: // logDryRunAction logs the action that was recorded by the "catch-all" (*,*) reactor and tells the user what would have happened in an user-friendly way