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 }