code: func prettyPrintEvent(out io.Writer, event eventtypes.Message) error {
  	if event.TimeNano != 0 {
  		fmt.Fprintf(out, "%s ", time.Unix(0, event.TimeNano).Format(rfc3339NanoFixed))
  	} else if event.Time != 0 {
  		fmt.Fprintf(out, "%s ", time.Unix(event.Time, 0).Format(rfc3339NanoFixed))
  	}
  
  	fmt.Fprintf(out, "%s %s %s", event.Type, event.Action, event.Actor.ID)
  
  	if len(event.Actor.Attributes) > 0 {
  		var attrs []string
  		var keys []string
  		for k := range event.Actor.Attributes {
  			keys = append(keys, k)
  		}
  		sort.Strings(keys)
  		for _, k := range keys {
  			v := event.Actor.Attributes[k]
  			attrs = append(attrs, fmt.Sprintf("%s=%s", k, v))
  		}
  		fmt.Fprintf(out, " (%s)", strings.Join(attrs, ", "))
  	}
  	fmt.Fprint(out, "\n")
  	return nil
  }
docs: // prettyPrintEvent prints all types of event information.
  // Each output includes the event type, actor id, name and action.
  // Actor attributes are printed at the end if the actor has any.