You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kratos/transport/http/calloption.go

67 lines
1.6 KiB

package http
// CallOption configures a Call before it starts or extracts information from
// a Call after it completes.
type CallOption interface {
// before is called before the call is sent to any server. If before
// returns a non-nil error, the RPC fails with that error.
before(*callInfo) error
// after is called after the call has completed. after cannot return an
// error, so any failures should be reported via output parameters.
after(*callInfo, *csAttempt)
}
type callInfo struct {
pathPattern string
method string
}
// EmptyCallOption does not alter the Call configuration.
// It can be embedded in another structure to carry satellite data for use
// by interceptors.
type EmptyCallOption struct{}
func (EmptyCallOption) before(*callInfo) error { return nil }
func (EmptyCallOption) after(*callInfo, *csAttempt) {}
type csAttempt struct{}
// PathPattern is pathpattern
func PathPattern(pathPattern string) CallOption {
return PathPatternCallOption{PathPattern: pathPattern}
}
// PathPatternCallOption is BodyPattern
type PathPatternCallOption struct {
EmptyCallOption
PathPattern string
}
func (o PathPatternCallOption) before(c *callInfo) error {
c.pathPattern = o.PathPattern
return nil
}
// Method is Method
func Method(method string) CallOption {
return MethodCallOption{Method: method}
}
// MethodCallOption is BodyCallOption
type MethodCallOption struct {
EmptyCallOption
Method string
}
func (o MethodCallOption) before(c *callInfo) error {
c.method = o.Method
return nil
}
func defaultCallInfo() callInfo {
return callInfo{
method: "POST",
}
}