Files
certimate/pkg/plugin/errors.go
2026-07-24 16:34:13 +08:00

97 lines
2.2 KiB
Go

package plugin
import (
"errors"
"fmt"
)
type ErrPluginNotFound struct {
ProviderType string
}
func (e *ErrPluginNotFound) Error() string {
return fmt.Sprintf("plugin: provider %q is not installed", e.ProviderType)
}
type ErrPluginIncompatible struct {
ProviderType string
Have uint32
Want uint32
Reason string
}
func (e *ErrPluginIncompatible) Error() string {
if e.Reason != "" {
return fmt.Sprintf("plugin: provider %q incompatible: %s", e.ProviderType, e.Reason)
}
return fmt.Sprintf("plugin: provider %q incompatible protocol version: have %d, want %d", e.ProviderType, e.Have, e.Want)
}
type ErrPluginCrashed struct {
ProviderType string
StderrTail string
Inner error
}
func (e *ErrPluginCrashed) Error() string {
inner := ""
if e.Inner != nil {
inner = e.Inner.Error()
}
if e.StderrTail != "" {
return fmt.Sprintf("plugin: provider %q crashed: %s\nstderr tail:\n%s", e.ProviderType, inner, e.StderrTail)
}
return fmt.Sprintf("plugin: provider %q crashed: %s", e.ProviderType, inner)
}
func (e *ErrPluginCrashed) Unwrap() error { return e.Inner }
type ErrPluginChecksum struct {
ProviderType string
Have string
Want string
}
func (e *ErrPluginChecksum) Error() string {
return fmt.Sprintf("plugin: provider %q checksum mismatch: have %s, want %s (advisory)", e.ProviderType, e.Have, e.Want)
}
type ErrPluginConfig struct {
ProviderType string
Inner error
}
func (e *ErrPluginConfig) Error() string {
return fmt.Sprintf("plugin: provider %q misconfigured: %v", e.ProviderType, e.Inner)
}
func (e *ErrPluginConfig) Unwrap() error { return e.Inner }
func AsPluginError(err error) error {
if err == nil {
return nil
}
var nf *ErrPluginNotFound
var inc *ErrPluginIncompatible
var crash *ErrPluginCrashed
if errors.As(err, &nf) || errors.As(err, &inc) || errors.As(err, &crash) {
return err
}
return err
}
func IsPluginNotFound(err error) bool {
var e *ErrPluginNotFound
return errors.As(err, &e)
}
func IsPluginIncompatible(err error) bool {
var e *ErrPluginIncompatible
return errors.As(err, &e)
}
func IsPluginCrashed(err error) bool {
var e *ErrPluginCrashed
return errors.As(err, &e)
}