2023-02-15 16:04:19 +01:00
package exerr
2023-07-24 10:42:39 +02:00
import (
2023-08-08 15:28:29 +02:00
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
2023-07-24 10:42:39 +02:00
"gogs.mikescher.com/BlackForestBytes/goext/langext"
)
2023-02-15 16:04:19 +01:00
type ErrorCategory struct { Category string }
var (
CatWrap = ErrorCategory { "Wrap" } // The error is simply wrapping another error (e.g. when a grpc call returns an error)
CatSystem = ErrorCategory { "System" } // An internal system error (e.g. connection to db failed)
CatUser = ErrorCategory { "User" } // The user (the API caller) did something wrong (e.g. he has no permissions to do this)
CatForeign = ErrorCategory { "Foreign" } // A foreign error that some component threw (e.g. an unknown mongodb error), happens if we call Wrap(..) on an non-bmerror value
)
2023-07-24 11:18:25 +02:00
//goland:noinspection GoUnusedGlobalVariable
2023-02-15 16:04:19 +01:00
var AllCategories = [ ] ErrorCategory { CatWrap , CatSystem , CatUser , CatForeign }
type ErrorSeverity struct { Severity string }
var (
SevTrace = ErrorSeverity { "Trace" }
SevDebug = ErrorSeverity { "Debug" }
SevInfo = ErrorSeverity { "Info" }
SevWarn = ErrorSeverity { "Warn" }
SevErr = ErrorSeverity { "Err" }
SevFatal = ErrorSeverity { "Fatal" }
)
2023-07-24 11:18:25 +02:00
//goland:noinspection GoUnusedGlobalVariable
2023-02-15 16:04:19 +01:00
var AllSeverities = [ ] ErrorSeverity { SevTrace , SevDebug , SevInfo , SevWarn , SevErr , SevFatal }
2023-07-24 10:42:39 +02:00
type ErrorType struct {
Key string
DefaultStatusCode * int
}
2023-02-15 16:04:19 +01:00
2023-07-24 11:18:25 +02:00
//goland:noinspection GoUnusedGlobalVariable
2023-02-15 16:04:19 +01:00
var (
2023-08-08 15:28:29 +02:00
TypeInternal = NewType ( "INTERNAL_ERROR" , langext . Ptr ( 500 ) )
TypePanic = NewType ( "PANIC" , langext . Ptr ( 500 ) )
TypeNotImplemented = NewType ( "NOT_IMPLEMENTED" , langext . Ptr ( 500 ) )
2023-07-24 11:11:15 +02:00
2023-08-21 15:08:35 +02:00
TypeMongoQuery = NewType ( "MONGO_QUERY" , langext . Ptr ( 500 ) )
TypeCursorTokenDecode = NewType ( "CURSOR_TOKEN_DECODE" , langext . Ptr ( 500 ) )
TypeMongoFilter = NewType ( "MONGO_FILTER" , langext . Ptr ( 500 ) )
TypeMongoReflection = NewType ( "MONGO_REFLECTION" , langext . Ptr ( 500 ) )
2023-11-09 10:17:29 +01:00
TypeMongoInvalidOpt = NewType ( "MONGO_INVALIDOPT" , langext . Ptr ( 500 ) )
2023-08-21 15:08:35 +02:00
2024-01-05 16:53:14 +01:00
TypeSQLQuery = NewType ( "SQL_QUERY" , langext . Ptr ( 500 ) )
TypeSQLBuild = NewType ( "SQL_BUILD" , langext . Ptr ( 500 ) )
2023-08-08 15:28:29 +02:00
TypeWrap = NewType ( "Wrap" , nil )
2023-07-24 11:11:15 +02:00
2023-08-08 15:28:29 +02:00
TypeBindFailURI = NewType ( "BINDFAIL_URI" , langext . Ptr ( 400 ) )
TypeBindFailQuery = NewType ( "BINDFAIL_QUERY" , langext . Ptr ( 400 ) )
TypeBindFailJSON = NewType ( "BINDFAIL_JSON" , langext . Ptr ( 400 ) )
TypeBindFailFormData = NewType ( "BINDFAIL_FORMDATA" , langext . Ptr ( 400 ) )
TypeBindFailHeader = NewType ( "BINDFAIL_HEADER" , langext . Ptr ( 400 ) )
2023-07-24 11:11:15 +02:00
2023-09-18 10:38:25 +02:00
TypeMarshalEntityID = NewType ( "MARSHAL_ENTITY_ID" , langext . Ptr ( 400 ) )
2023-10-26 13:01:58 +02:00
TypeInvalidCSID = NewType ( "INVALID_CSID" , langext . Ptr ( 400 ) )
2023-09-18 10:38:25 +02:00
2023-12-04 13:48:11 +01:00
TypeGoogleStatuscode = NewType ( "GOOGLE_STATUSCODE" , langext . Ptr ( 400 ) )
TypeGoogleResponse = NewType ( "GOOGLE_RESPONSE" , langext . Ptr ( 400 ) )
2023-08-08 15:28:29 +02:00
TypeUnauthorized = NewType ( "UNAUTHORIZED" , langext . Ptr ( 401 ) )
TypeAuthFailed = NewType ( "AUTH_FAILED" , langext . Ptr ( 401 ) )
2023-07-24 11:11:15 +02:00
2024-01-04 12:38:03 +01:00
// other values come from the downstream application that uses goext
2023-02-15 16:04:19 +01:00
)
2023-07-24 10:42:39 +02:00
2023-08-08 15:28:29 +02:00
var registeredTypes = dataext . SyncSet [ string ] { }
2023-07-24 11:18:25 +02:00
func NewType ( key string , defStatusCode * int ) ErrorType {
2023-08-08 15:28:29 +02:00
insertOkay := registeredTypes . Add ( key )
if ! insertOkay {
panic ( "Cannot register same ErrType ('" + key + "') more than once" )
}
2023-07-24 11:16:57 +02:00
return ErrorType { key , defStatusCode }
}
2023-07-24 10:42:39 +02:00
type LogPrintLevel string
const (
LogPrintFull LogPrintLevel = "Full"
LogPrintOverview LogPrintLevel = "Overview"
LogPrintShort LogPrintLevel = "Short"
)