github.com/sttk/sabi@v0.5.0/example_err_test.go (about)

     1  package sabi_test
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"github.com/sttk/sabi"
     8  )
     9  
    10  func ExampleNewErr() {
    11  	type /* error reasons */ (
    12  		FailToDoSomething           struct{}
    13  		FailToDoSomethingWithParams struct {
    14  			Param1 string
    15  			Param2 int
    16  		}
    17  	)
    18  
    19  	// (1) Creates an Err with no situation parameter.
    20  	err := sabi.NewErr(FailToDoSomething{})
    21  	fmt.Printf("(1) %v\n", err)
    22  
    23  	// (2) Creates an Err with situation parameters.
    24  	err = sabi.NewErr(FailToDoSomethingWithParams{
    25  		Param1: "ABC",
    26  		Param2: 123,
    27  	})
    28  	fmt.Printf("(2) %v\n", err)
    29  
    30  	cause := errors.New("Causal error")
    31  
    32  	// (3) Creates an Err with a causal error.
    33  	err = sabi.NewErr(FailToDoSomething{}, cause)
    34  	fmt.Printf("(3) %v\n", err)
    35  
    36  	// (4) Creates an Err with situation parameters and a causal error.
    37  	err = sabi.NewErr(FailToDoSomethingWithParams{
    38  		Param1: "ABC",
    39  		Param2: 123,
    40  	}, cause)
    41  	fmt.Printf("(4) %v\n", err)
    42  
    43  	// Output:
    44  	// (1) {reason=FailToDoSomething}
    45  	// (2) {reason=FailToDoSomethingWithParams, Param1=ABC, Param2=123}
    46  	// (3) {reason=FailToDoSomething, cause=Causal error}
    47  	// (4) {reason=FailToDoSomethingWithParams, Param1=ABC, Param2=123, cause=Causal error}
    48  }
    49  
    50  func ExampleOk() {
    51  	err := sabi.Ok()
    52  	fmt.Printf("err = %v\n", err)
    53  	fmt.Printf("err.IsOk() = %v\n", err.IsOk())
    54  
    55  	// Output:
    56  	// err = {reason=nil}
    57  	// err.IsOk() = true
    58  }
    59  
    60  func ExampleErr_Cause() {
    61  	type FailToDoSomething struct{}
    62  
    63  	cause := errors.New("Causal error")
    64  
    65  	err := sabi.NewErr(FailToDoSomething{}, cause)
    66  	fmt.Printf("%v\n", err.Cause())
    67  
    68  	// Output:
    69  	// Causal error
    70  }
    71  
    72  func ExampleErr_Error() {
    73  	type FailToDoSomething struct {
    74  		Param1 string
    75  		Param2 int
    76  	}
    77  
    78  	cause := errors.New("Causal error")
    79  
    80  	err := sabi.NewErr(FailToDoSomething{
    81  		Param1: "ABC",
    82  		Param2: 123,
    83  	}, cause)
    84  	fmt.Printf("%v\n", err.Error())
    85  
    86  	// Output:
    87  	// {reason=FailToDoSomething, Param1=ABC, Param2=123, cause=Causal error}
    88  }
    89  
    90  func ExampleErr_Get() {
    91  	type FailToDoSomething struct {
    92  		Param1 string
    93  		Param2 int
    94  	}
    95  
    96  	err := sabi.NewErr(FailToDoSomething{
    97  		Param1: "ABC",
    98  		Param2: 123,
    99  	})
   100  	fmt.Printf("Param1=%v\n", err.Get("Param1"))
   101  	fmt.Printf("Param2=%v\n", err.Get("Param2"))
   102  	fmt.Printf("Param3=%v\n", err.Get("Param3"))
   103  
   104  	// Output:
   105  	// Param1=ABC
   106  	// Param2=123
   107  	// Param3=<nil>
   108  }
   109  
   110  func ExampleErr_IsOk() {
   111  	err := sabi.Ok()
   112  	fmt.Printf("%v\n", err.IsOk())
   113  
   114  	type FailToDoSomething struct{}
   115  	err = sabi.NewErr(FailToDoSomething{})
   116  	fmt.Printf("%v\n", err.IsOk())
   117  
   118  	// Output:
   119  	// true
   120  	// false
   121  }
   122  
   123  func ExampleErr_Reason() {
   124  	type FailToDoSomething struct {
   125  		Param1 string
   126  	}
   127  
   128  	err := sabi.NewErr(FailToDoSomething{Param1: "value1"})
   129  	switch err.Reason().(type) {
   130  	case FailToDoSomething:
   131  		fmt.Println("The reason of the error is: FailToDoSomething")
   132  		reason := err.Reason().(FailToDoSomething)
   133  		fmt.Printf("The value of reason.Param1 is: %v\n", reason.Param1)
   134  	}
   135  
   136  	err = sabi.NewErr(&FailToDoSomething{Param1: "value2"})
   137  	switch err.Reason().(type) {
   138  	case *FailToDoSomething:
   139  		fmt.Println("The reason of the error is: *FailToDoSomething")
   140  		reason := err.Reason().(*FailToDoSomething)
   141  		fmt.Printf("The value of reason.Param1 is: %v\n", reason.Param1)
   142  	}
   143  
   144  	// Output:
   145  	// The reason of the error is: FailToDoSomething
   146  	// The value of reason.Param1 is: value1
   147  	// The reason of the error is: *FailToDoSomething
   148  	// The value of reason.Param1 is: value2
   149  }
   150  
   151  func ExampleErr_ReasonName() {
   152  	type FailToDoSomething struct{}
   153  
   154  	err := sabi.NewErr(FailToDoSomething{})
   155  	fmt.Printf("%v\n", err.ReasonName())
   156  
   157  	// Output:
   158  	// FailToDoSomething
   159  }
   160  
   161  func ExampleErr_ReasonPackage() {
   162  	type FailToDoSomething struct{}
   163  
   164  	err := sabi.NewErr(FailToDoSomething{})
   165  	fmt.Printf("%v\n", err.ReasonPackage())
   166  
   167  	// Output:
   168  	// github.com/sttk/sabi_test
   169  }
   170  
   171  func ExampleErr_Situation() {
   172  	type FailToDoSomething struct {
   173  		Param1 string
   174  		Param2 int
   175  	}
   176  
   177  	err := sabi.NewErr(FailToDoSomething{
   178  		Param1: "ABC",
   179  		Param2: 123,
   180  	})
   181  	fmt.Printf("%v\n", err.Situation())
   182  
   183  	// Output:
   184  	// map[Param1:ABC Param2:123]
   185  }
   186  
   187  func ExampleErr_Unwrap() {
   188  	type FailToDoSomething struct{}
   189  
   190  	cause1 := errors.New("Causal error 1")
   191  	cause2 := errors.New("Causal error 2")
   192  
   193  	err := sabi.NewErr(FailToDoSomething{}, cause1)
   194  
   195  	fmt.Printf("err.Unwrap() = %v\n", err.Unwrap())
   196  	fmt.Printf("errors.Unwrap(err) = %v\n", errors.Unwrap(err))
   197  	fmt.Printf("errors.Is(err, cause1) = %v\n", errors.Is(err, cause1))
   198  	fmt.Printf("errors.Is(err, cause2) = %v\n", errors.Is(err, cause2))
   199  	fmt.Printf("errors.As(err, cause1) = %v\n", errors.Is(err, cause1))
   200  	fmt.Printf("errors.As(err, cause2) = %v\n", errors.Is(err, cause2))
   201  
   202  	// Output:
   203  	// err.Unwrap() = Causal error 1
   204  	// errors.Unwrap(err) = Causal error 1
   205  	// errors.Is(err, cause1) = true
   206  	// errors.Is(err, cause2) = false
   207  	// errors.As(err, cause1) = true
   208  	// errors.As(err, cause2) = false
   209  }
   210  
   211  func ExampleErr_IfOk() {
   212  	err := sabi.Ok()
   213  	err.IfOk(func() sabi.Err {
   214  		fmt.Println("execute if non error.")
   215  		return sabi.Ok()
   216  	})
   217  
   218  	err = sabi.NewErr(FailToDoSomething{})
   219  	err.IfOk(func() sabi.Err {
   220  		fmt.Println("not execute if some error.")
   221  		return sabi.Ok()
   222  	})
   223  
   224  	// Output:
   225  	// execute if non error.
   226  }