mirror of https://github.com/usememos/memos
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
package common
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
)
 | 
						|
 | 
						|
// Code is the error code.
 | 
						|
type Code int
 | 
						|
 | 
						|
// Application error codes.
 | 
						|
const (
 | 
						|
	// 0 ~ 99 general error.
 | 
						|
	Ok             Code = 0
 | 
						|
	Internal       Code = 1
 | 
						|
	NotAuthorized  Code = 2
 | 
						|
	Invalid        Code = 3
 | 
						|
	NotFound       Code = 4
 | 
						|
	Conflict       Code = 5
 | 
						|
	NotImplemented Code = 6
 | 
						|
)
 | 
						|
 | 
						|
// Error represents an application-specific error. Application errors can be
 | 
						|
// unwrapped by the caller to extract out the code & message.
 | 
						|
//
 | 
						|
// Any non-application error (such as a disk error) should be reported as an
 | 
						|
// Internal error and the human user should only see "Internal error" as the
 | 
						|
// message. These low-level internal error details should only be logged and
 | 
						|
// reported to the operator of the application (not the end user).
 | 
						|
type Error struct {
 | 
						|
	// Machine-readable error code.
 | 
						|
	Code Code
 | 
						|
 | 
						|
	// Embedded error.
 | 
						|
	Err error
 | 
						|
}
 | 
						|
 | 
						|
// Error implements the error interface. Not used by the application otherwise.
 | 
						|
func (e *Error) Error() string {
 | 
						|
	return e.Err.Error()
 | 
						|
}
 | 
						|
 | 
						|
// ErrorCode unwraps an application error and returns its code.
 | 
						|
// Non-application errors always return EINTERNAL.
 | 
						|
func ErrorCode(err error) Code {
 | 
						|
	var e *Error
 | 
						|
	if err == nil {
 | 
						|
		return Ok
 | 
						|
	} else if errors.As(err, &e) {
 | 
						|
		return e.Code
 | 
						|
	}
 | 
						|
	return Internal
 | 
						|
}
 | 
						|
 | 
						|
// ErrorMessage unwraps an application error and returns its message.
 | 
						|
// Non-application errors always return "Internal error".
 | 
						|
func ErrorMessage(err error) string {
 | 
						|
	var e *Error
 | 
						|
	if err == nil {
 | 
						|
		return ""
 | 
						|
	} else if errors.As(err, &e) {
 | 
						|
		return e.Err.Error()
 | 
						|
	}
 | 
						|
	return "Internal error."
 | 
						|
}
 | 
						|
 | 
						|
// Errorf is a helper function to return an Error with a given code and error.
 | 
						|
func Errorf(code Code, err error) *Error {
 | 
						|
	return &Error{
 | 
						|
		Code: code,
 | 
						|
		Err:  err,
 | 
						|
	}
 | 
						|
}
 |