Blame vendor/github.com/vmware/govmomi/vim25/soap/error.go

Packit 63bb0d
/*
Packit 63bb0d
Copyright (c) 2014 VMware, Inc. All Rights Reserved.
Packit 63bb0d
Packit 63bb0d
Licensed under the Apache License, Version 2.0 (the "License");
Packit 63bb0d
you may not use this file except in compliance with the License.
Packit 63bb0d
You may obtain a copy of the License at
Packit 63bb0d
Packit 63bb0d
    http://www.apache.org/licenses/LICENSE-2.0
Packit 63bb0d
Packit 63bb0d
Unless required by applicable law or agreed to in writing, software
Packit 63bb0d
distributed under the License is distributed on an "AS IS" BASIS,
Packit 63bb0d
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 63bb0d
See the License for the specific language governing permissions and
Packit 63bb0d
limitations under the License.
Packit 63bb0d
*/
Packit 63bb0d
Packit 63bb0d
package soap
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"fmt"
Packit 63bb0d
	"reflect"
Packit 63bb0d
Packit 63bb0d
	"github.com/vmware/govmomi/vim25/types"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type regularError struct {
Packit 63bb0d
	err error
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (r regularError) Error() string {
Packit 63bb0d
	return r.err.Error()
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type soapFaultError struct {
Packit 63bb0d
	fault *Fault
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (s soapFaultError) Error() string {
Packit 63bb0d
	msg := s.fault.String
Packit 63bb0d
Packit 63bb0d
	if msg == "" {
Packit 63bb0d
		if s.fault.Detail.Fault == nil {
Packit 63bb0d
			msg = "unknown fault"
Packit 63bb0d
		} else {
Packit 63bb0d
			msg = reflect.TypeOf(s.fault.Detail.Fault).Name()
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return fmt.Sprintf("%s: %s", s.fault.Code, msg)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type vimFaultError struct {
Packit 63bb0d
	fault types.BaseMethodFault
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (v vimFaultError) Error() string {
Packit 63bb0d
	typ := reflect.TypeOf(v.fault)
Packit 63bb0d
	for typ.Kind() == reflect.Ptr {
Packit 63bb0d
		typ = typ.Elem()
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return typ.Name()
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (v vimFaultError) Fault() types.BaseMethodFault {
Packit 63bb0d
	return v.fault
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func Wrap(err error) error {
Packit 63bb0d
	switch err.(type) {
Packit 63bb0d
	case regularError:
Packit 63bb0d
		return err
Packit 63bb0d
	case soapFaultError:
Packit 63bb0d
		return err
Packit 63bb0d
	case vimFaultError:
Packit 63bb0d
		return err
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return WrapRegularError(err)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func WrapRegularError(err error) error {
Packit 63bb0d
	return regularError{err}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func IsRegularError(err error) bool {
Packit 63bb0d
	_, ok := err.(regularError)
Packit 63bb0d
	return ok
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func ToRegularError(err error) error {
Packit 63bb0d
	return err.(regularError).err
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func WrapSoapFault(f *Fault) error {
Packit 63bb0d
	return soapFaultError{f}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func IsSoapFault(err error) bool {
Packit 63bb0d
	_, ok := err.(soapFaultError)
Packit 63bb0d
	return ok
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func ToSoapFault(err error) *Fault {
Packit 63bb0d
	return err.(soapFaultError).fault
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func WrapVimFault(v types.BaseMethodFault) error {
Packit 63bb0d
	return vimFaultError{v}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func IsVimFault(err error) bool {
Packit 63bb0d
	_, ok := err.(vimFaultError)
Packit 63bb0d
	return ok
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func ToVimFault(err error) types.BaseMethodFault {
Packit 63bb0d
	return err.(vimFaultError).fault
Packit 63bb0d
}