| OLD | NEW | 
|   1 // Copyright 2016 The Chromium Authors. All rights reserved. |   1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
|   2 // Use of this source code is governed by a BSD-style license that can be |   2 // Use of this source code is governed by a BSD-style license that can be | 
|   3 // found in the LICENSE file. |   3 // found in the LICENSE file. | 
|   4  |   4  | 
|   5 package prpc |   5 package prpc | 
|   6  |   6  | 
|   7 import "fmt" |   7 import ( | 
 |   8 »       "fmt" | 
 |   9 ) | 
|   8  |  10  | 
|   9 // httpError is an error with HTTP status. |  11 // protocolError is returned if a pRPC request is malformed. | 
|  10 // Many internal functions return *httpError instead of error |  12 type protocolError struct { | 
|  11 // to guarantee expected HTTP status via type-system. |  | 
|  12 // Supported by ErrorStatus and ErrorDesc. |  | 
|  13 type httpError struct { |  | 
|  14         err    error |  13         err    error | 
|  15 »       status int |  14 »       status int // HTTP status to use in response. | 
|  16 } |  15 } | 
|  17  |  16  | 
|  18 func (e *httpError) Error() string { |  17 func (e *protocolError) Error() string { | 
|  19 »       return fmt.Sprintf("HTTP %d: %s", e.status, e.err) |  18 »       return fmt.Sprintf("pRPC: %s", e.err) | 
|  20 } |  19 } | 
|  21  |  20  | 
|  22 // withStatus wraps an error with an HTTP status. |  21 // withStatus wraps an error with an HTTP status. | 
|  23 // If err is nil, returns nil. |  22 // If err is nil, returns nil. | 
|  24 func withStatus(err error, status int) *httpError { |  23 func withStatus(err error, status int) *protocolError { | 
|  25 »       if _, ok := err.(*httpError); ok { |  24 »       if _, ok := err.(*protocolError); ok { | 
|  26 »       »       panicf("httpError in httpError") |  25 »       »       panic("protocolError in protocolError") | 
|  27         } |  26         } | 
|  28         if err == nil { |  27         if err == nil { | 
|  29                 return nil |  28                 return nil | 
|  30         } |  29         } | 
|  31 »       return &httpError{err, status} |  30 »       return &protocolError{err, status} | 
|  32 } |  31 } | 
|  33  |  32  | 
|  34 // errorf creates a new error with an HTTP status. |  33 // errorf creates a new protocol error. | 
|  35 func errorf(status int, format string, a ...interface{}) *httpError { |  34 func errorf(status int, format string, a ...interface{}) *protocolError { | 
|  36         return withStatus(fmt.Errorf(format, a...), status) |  35         return withStatus(fmt.Errorf(format, a...), status) | 
|  37 } |  36 } | 
|  38  |  | 
|  39 // Errorf creates a new error with an HTTP status. |  | 
|  40 // |  | 
|  41 // See also grpc.Errorf that accepts a gRPC code. |  | 
|  42 func Errorf(status int, format string, a ...interface{}) error { |  | 
|  43         return errorf(status, format, a...) |  | 
|  44 } |  | 
|  45  |  | 
|  46 func panicf(format string, a ...interface{}) { |  | 
|  47         panic(fmt.Errorf(format, a...)) |  | 
|  48 } |  | 
| OLD | NEW |