aboutsummaryrefslogtreecommitdiffhomepage
path: root/msg.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-07-02 21:23:55 +0900
committerOphestra <cat@gensokyo.uk>2025-07-02 21:23:55 +0900
commita1d98823f8d17b49b432508d071b62ccd426f1ce (patch)
treecacbe2d42f9ff3fd49b455e849770840e34d076a /msg.go
parent255b77d91dc40736b7bbd7d96b22500076b098e5 (diff)
hakurei: move container toplevel
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'msg.go')
-rw-r--r--msg.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/msg.go b/msg.go
new file mode 100644
index 00000000..aa7a272d
--- /dev/null
+++ b/msg.go
@@ -0,0 +1,43 @@
+package hakurei
+
+import (
+ "log"
+ "sync/atomic"
+)
+
+type Msg interface {
+ IsVerbose() bool
+ Verbose(v ...any)
+ Verbosef(format string, v ...any)
+ WrapErr(err error, a ...any) error
+ PrintBaseErr(err error, fallback string)
+
+ Suspend()
+ Resume() bool
+
+ BeforeExit()
+}
+
+type DefaultMsg struct{ inactive atomic.Bool }
+
+func (msg *DefaultMsg) IsVerbose() bool { return true }
+func (msg *DefaultMsg) Verbose(v ...any) {
+ if !msg.inactive.Load() {
+ log.Println(v...)
+ }
+}
+func (msg *DefaultMsg) Verbosef(format string, v ...any) {
+ if !msg.inactive.Load() {
+ log.Printf(format, v...)
+ }
+}
+
+func (msg *DefaultMsg) WrapErr(err error, a ...any) error {
+ log.Println(a...)
+ return err
+}
+func (msg *DefaultMsg) PrintBaseErr(err error, fallback string) { log.Println(fallback, err) }
+
+func (msg *DefaultMsg) Suspend() { msg.inactive.Store(true) }
+func (msg *DefaultMsg) Resume() bool { return msg.inactive.CompareAndSwap(true, false) }
+func (msg *DefaultMsg) BeforeExit() {}