mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-03 14:27:48 +08:00
97 lines
2.2 KiB
Go
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)
|
|
}
|