Some basic libraries for use
This commit is contained in:
parent
999d32ea5a
commit
8f2da7be66
|
@ -0,0 +1,36 @@
|
|||
package cerror
|
||||
|
||||
import (
|
||||
"git.twelvetwelve.org/library/core/log"
|
||||
)
|
||||
|
||||
var codes = make(map[string]*Code)
|
||||
|
||||
type Code struct {
|
||||
code string
|
||||
}
|
||||
|
||||
func (c *Code) Error() string {
|
||||
return c.code
|
||||
}
|
||||
|
||||
func NewCode(urn string) *Code {
|
||||
if _, ok := codes[urn]; ok {
|
||||
log.Panicf("error code %s already exists", urn)
|
||||
}
|
||||
|
||||
code := &Code{
|
||||
code: urn,
|
||||
}
|
||||
codes[urn] = code
|
||||
return code
|
||||
}
|
||||
|
||||
func GetCode(urn string) *Code {
|
||||
if code, ok := codes[urn]; ok {
|
||||
return code
|
||||
}
|
||||
|
||||
log.Panicf("error code %s does not exist", urn)
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package cerror
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Error struct {
|
||||
code *Code
|
||||
msg string
|
||||
kv map[string]interface{}
|
||||
}
|
||||
|
||||
func (e *Error) Code() *Code {
|
||||
return e.code
|
||||
}
|
||||
|
||||
func (e *Error) Error() string {
|
||||
return fmt.Sprintf("%s:%s", e.code, e.msg)
|
||||
}
|
||||
|
||||
func (e *Error) KV(k string, v interface{}) {
|
||||
e.kv[k] = v
|
||||
}
|
||||
|
||||
func New(code *Code, message string) *Error {
|
||||
e := &Error{
|
||||
code: code,
|
||||
msg: message,
|
||||
kv: make(map[string]interface{}),
|
||||
}
|
||||
|
||||
return e
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package cerror
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.twelvetwelve.org/library/core/testutil/assert"
|
||||
)
|
||||
|
||||
func TestError_Errors(t *testing.T) {
|
||||
c := NewCode("org.twelvetwelve.one")
|
||||
assert.NotNil(t, c)
|
||||
|
||||
e := New(c, "something went wrong")
|
||||
assert.NotNil(t, e)
|
||||
|
||||
assert.Equal(t, e.Code(), c)
|
||||
assert.WillPanic(t, func() { _ = NewCode("org.twelvetwelve.one") })
|
||||
assert.WillPanic(t, func() { _ = GetCode("org.twelvetwelve.two") })
|
||||
|
||||
c2 := NewCode("org.twelvetwelve.two")
|
||||
assert.NotNil(t, c2)
|
||||
assert.NotEqual(t, c, c2)
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package log
|
||||
|
||||
var Default = &Log{
|
||||
fmtTime: "2006-01-02 15:04:05",
|
||||
level: LogAll,
|
||||
}
|
||||
|
||||
func Printf(s string, v ...interface{}) {
|
||||
Default.Printf(s, v...)
|
||||
}
|
||||
|
||||
func Panicf(s string, v ...interface{}) {
|
||||
Default.Panicf(s, v...)
|
||||
}
|
||||
|
||||
func Fatalf(s string, v ...interface{}) {
|
||||
Default.Fatalf(s, v...)
|
||||
}
|
||||
|
||||
func Infof(s string, v ...interface{}) {
|
||||
Default.Infof(s, v...)
|
||||
}
|
||||
|
||||
func Eventf(s string, v ...interface{}) {
|
||||
Default.Eventf(s, v...)
|
||||
}
|
||||
|
||||
func Warnf(s string, v ...interface{}) {
|
||||
Default.Warnf(s, v...)
|
||||
}
|
||||
|
||||
func Debugf(s string, v ...interface{}) {
|
||||
Default.Debugf(s, v...)
|
||||
}
|
||||
|
||||
func Highlightf(s string, v ...interface{}) {
|
||||
Default.Highlightf(s, v...)
|
||||
}
|
||||
|
||||
func Errorf(s string, v ...interface{}) {
|
||||
Default.Errorf(s, v...)
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package log
|
||||
|
||||
type Logger interface {
|
||||
Printf(s string, v ...interface{})
|
||||
Panicf(s string, v ...interface{})
|
||||
Fatalf(s string, v ...interface{})
|
||||
Infof(s string, v ...interface{})
|
||||
Eventf(s string, v ...interface{})
|
||||
Warnf(s string, v ...interface{})
|
||||
Debugf(s string, v ...interface{})
|
||||
Highlightf(s string, v ...interface{})
|
||||
Errorf(s string, v ...interface{})
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
ColorReset = "\033[0m"
|
||||
ColorRed = "\033[31m"
|
||||
ColorGreen = "\033[32m"
|
||||
ColorYellow = "\033[33m"
|
||||
ColorCyan = "\033[36m"
|
||||
ColorGray = "\033[2;37m"
|
||||
)
|
||||
|
||||
const (
|
||||
LogError = 1 << iota
|
||||
LogWarn
|
||||
LogEvent
|
||||
LogInfo
|
||||
LogHighlight
|
||||
LogPrint
|
||||
LogDebug
|
||||
|
||||
LogAll = LogError | LogWarn | LogEvent | LogInfo | LogHighlight | LogPrint | LogDebug
|
||||
)
|
||||
|
||||
type Log struct {
|
||||
fmtTime string
|
||||
level uint32
|
||||
}
|
||||
|
||||
func (l *Log) Printf(s string, v ...interface{}) {
|
||||
if l.level&LogPrint == LogPrint {
|
||||
l.ColorPrint(ColorGray, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) Panicf(s string, v ...interface{}) {
|
||||
panic(fmt.Sprintf(s, v...))
|
||||
}
|
||||
|
||||
func (l *Log) Fatalf(s string, v ...interface{}) {
|
||||
l.ColorPrint(ColorRed, fmt.Sprintf(s, v...))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func (l *Log) Infof(s string, v ...interface{}) {
|
||||
if l.level&LogInfo == LogInfo {
|
||||
l.ColorPrint(ColorReset, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) Eventf(s string, v ...interface{}) {
|
||||
if l.level&LogEvent == LogEvent {
|
||||
l.ColorPrint(ColorCyan, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) Warnf(s string, v ...interface{}) {
|
||||
if l.level&LogWarn == LogWarn {
|
||||
l.ColorPrint(ColorYellow, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) Debugf(s string, v ...interface{}) {
|
||||
if l.level&LogDebug == LogDebug {
|
||||
l.ColorPrint(ColorGray, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) Highlightf(s string, v ...interface{}) {
|
||||
if l.level&LogHighlight == LogHighlight {
|
||||
l.ColorPrint(ColorGreen, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) Errorf(s string, v ...interface{}) {
|
||||
if l.level&LogHighlight == LogHighlight {
|
||||
l.ColorPrint(ColorRed, fmt.Sprintf(s, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Log) ColorPrint(color string, s string) {
|
||||
now := time.Now() // get this early.
|
||||
fmt.Fprintf(os.Stdout, "%s | %s%s%s", now.Format(l.fmtTime), color, s, ColorReset)
|
||||
}
|
||||
|
||||
func (l *Log) SetLevel(level uint32) {
|
||||
l.level = level
|
||||
}
|
||||
|
||||
func (l *Log) SetTimeFormat(fmt string) {
|
||||
l.fmtTime = fmt
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package assert
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func WillPanic(t *testing.T, f func()) {
|
||||
t.Helper()
|
||||
defer func() { _ = recover() }()
|
||||
f()
|
||||
t.Fatalf("should have panicked")
|
||||
}
|
||||
|
||||
func Equal(t *testing.T, expect, check interface{}) {
|
||||
if expect != check {
|
||||
t.Fatalf("%v:%v not equal", expect, check)
|
||||
}
|
||||
}
|
||||
|
||||
func NotEqual(t *testing.T, expect, check interface{}) {
|
||||
if expect == check {
|
||||
t.Fatalf("%v:%v equal", expect, check)
|
||||
}
|
||||
}
|
||||
|
||||
func NotNil(t *testing.T, v interface{}) {
|
||||
if v == nil {
|
||||
t.Fatalf("nil")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue