spew.go raw

   1  /*
   2   * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>
   3   *
   4   * Permission to use, copy, modify, and distribute this software for any
   5   * purpose with or without fee is hereby granted, provided that the above
   6   * copyright notice and this permission notice appear in all copies.
   7   *
   8   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   9   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15   */
  16  
  17  package spew
  18  
  19  import (
  20  	"fmt"
  21  	"io"
  22  )
  23  
  24  // Errorf is a wrapper for fmt.Errorf that treats each argument as if it were
  25  // passed with a default Formatter interface returned by NewFormatter.  It
  26  // returns the formatted string as a value that satisfies error.  See
  27  // NewFormatter for formatting details.
  28  //
  29  // This function is shorthand for the following syntax:
  30  //
  31  //	fmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b))
  32  func Errorf(format string, a ...interface{}) (err error) {
  33  	return fmt.Errorf(format, convertArgs(a)...)
  34  }
  35  
  36  // Fprint is a wrapper for fmt.Fprint that treats each argument as if it were
  37  // passed with a default Formatter interface returned by NewFormatter.  It
  38  // returns the number of bytes written and any write error encountered.  See
  39  // NewFormatter for formatting details.
  40  //
  41  // This function is shorthand for the following syntax:
  42  //
  43  //	fmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b))
  44  func Fprint(w io.Writer, a ...interface{}) (n int, err error) {
  45  	return fmt.Fprint(w, convertArgs(a)...)
  46  }
  47  
  48  // Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were
  49  // passed with a default Formatter interface returned by NewFormatter.  It
  50  // returns the number of bytes written and any write error encountered.  See
  51  // NewFormatter for formatting details.
  52  //
  53  // This function is shorthand for the following syntax:
  54  //
  55  //	fmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b))
  56  func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
  57  	return fmt.Fprintf(w, format, convertArgs(a)...)
  58  }
  59  
  60  // Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it
  61  // passed with a default Formatter interface returned by NewFormatter.  See
  62  // NewFormatter for formatting details.
  63  //
  64  // This function is shorthand for the following syntax:
  65  //
  66  //	fmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b))
  67  func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
  68  	return fmt.Fprintln(w, convertArgs(a)...)
  69  }
  70  
  71  // Print is a wrapper for fmt.Print that treats each argument as if it were
  72  // passed with a default Formatter interface returned by NewFormatter.  It
  73  // returns the number of bytes written and any write error encountered.  See
  74  // NewFormatter for formatting details.
  75  //
  76  // This function is shorthand for the following syntax:
  77  //
  78  //	fmt.Print(spew.NewFormatter(a), spew.NewFormatter(b))
  79  func Print(a ...interface{}) (n int, err error) {
  80  	return fmt.Print(convertArgs(a)...)
  81  }
  82  
  83  // Printf is a wrapper for fmt.Printf that treats each argument as if it were
  84  // passed with a default Formatter interface returned by NewFormatter.  It
  85  // returns the number of bytes written and any write error encountered.  See
  86  // NewFormatter for formatting details.
  87  //
  88  // This function is shorthand for the following syntax:
  89  //
  90  //	fmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b))
  91  func Printf(format string, a ...interface{}) (n int, err error) {
  92  	return fmt.Printf(format, convertArgs(a)...)
  93  }
  94  
  95  // Println is a wrapper for fmt.Println that treats each argument as if it were
  96  // passed with a default Formatter interface returned by NewFormatter.  It
  97  // returns the number of bytes written and any write error encountered.  See
  98  // NewFormatter for formatting details.
  99  //
 100  // This function is shorthand for the following syntax:
 101  //
 102  //	fmt.Println(spew.NewFormatter(a), spew.NewFormatter(b))
 103  func Println(a ...interface{}) (n int, err error) {
 104  	return fmt.Println(convertArgs(a)...)
 105  }
 106  
 107  // Sprint is a wrapper for fmt.Sprint that treats each argument as if it were
 108  // passed with a default Formatter interface returned by NewFormatter.  It
 109  // returns the resulting string.  See NewFormatter for formatting details.
 110  //
 111  // This function is shorthand for the following syntax:
 112  //
 113  //	fmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b))
 114  func Sprint(a ...interface{}) string {
 115  	return fmt.Sprint(convertArgs(a)...)
 116  }
 117  
 118  // Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were
 119  // passed with a default Formatter interface returned by NewFormatter.  It
 120  // returns the resulting string.  See NewFormatter for formatting details.
 121  //
 122  // This function is shorthand for the following syntax:
 123  //
 124  //	fmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b))
 125  func Sprintf(format string, a ...interface{}) string {
 126  	return fmt.Sprintf(format, convertArgs(a)...)
 127  }
 128  
 129  // Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it
 130  // were passed with a default Formatter interface returned by NewFormatter.  It
 131  // returns the resulting string.  See NewFormatter for formatting details.
 132  //
 133  // This function is shorthand for the following syntax:
 134  //
 135  //	fmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b))
 136  func Sprintln(a ...interface{}) string {
 137  	return fmt.Sprintln(convertArgs(a)...)
 138  }
 139  
 140  // convertArgs accepts a slice of arguments and returns a slice of the same
 141  // length with each argument converted to a default spew Formatter interface.
 142  func convertArgs(args []interface{}) (formatters []interface{}) {
 143  	formatters = make([]interface{}, len(args))
 144  	for index, arg := range args {
 145  		formatters[index] = NewFormatter(arg)
 146  	}
 147  	return formatters
 148  }
 149