aboutsummaryrefslogtreecommitdiffhomepage
path: root/hst/enablement.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-15 04:57:37 +0900
committerOphestra <cat@gensokyo.uk>2025-08-15 05:16:51 +0900
commit4ffeec3004607b76f73e504da220a1490c598348 (patch)
tree68cca16c22814b13974db0f19c151f8eb31e2dae /hst/enablement.go
parent9ed3ba85eaba4bc4bd12b290dc4daf00ffe159dc (diff)
hst/enablement: editor friendly enablement adaptor
Having the bit field value here (in decimal, no less) is unfriendly to text editors. Use a bunch of booleans here to improve ease of use. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'hst/enablement.go')
-rw-r--r--hst/enablement.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/hst/enablement.go b/hst/enablement.go
new file mode 100644
index 00000000..021288b3
--- /dev/null
+++ b/hst/enablement.go
@@ -0,0 +1,69 @@
+package hst
+
+import (
+ "encoding/json"
+ "syscall"
+
+ "hakurei.app/system"
+)
+
+// NewEnablements returns the address of [system.Enablement] as [Enablements].
+func NewEnablements(e system.Enablement) *Enablements { return (*Enablements)(&e) }
+
+// enablementsJSON is the [json] representation of the [system.Enablement] bit field.
+type enablementsJSON struct {
+ Wayland bool `json:"wayland,omitempty"`
+ X11 bool `json:"x11,omitempty"`
+ DBus bool `json:"dbus,omitempty"`
+ Pulse bool `json:"pulse,omitempty"`
+}
+
+// Enablements is the [json] adapter for [system.Enablement].
+type Enablements system.Enablement
+
+// Unwrap returns the underlying [system.Enablement].
+func (e *Enablements) Unwrap() system.Enablement {
+ if e == nil {
+ return 0
+ }
+ return system.Enablement(*e)
+}
+
+func (e *Enablements) MarshalJSON() ([]byte, error) {
+ if e == nil {
+ return nil, syscall.EINVAL
+ }
+ return json.Marshal(&enablementsJSON{
+ Wayland: system.Enablement(*e)&system.EWayland != 0,
+ X11: system.Enablement(*e)&system.EX11 != 0,
+ DBus: system.Enablement(*e)&system.EDBus != 0,
+ Pulse: system.Enablement(*e)&system.EPulse != 0,
+ })
+}
+
+func (e *Enablements) UnmarshalJSON(data []byte) error {
+ if e == nil {
+ return syscall.EINVAL
+ }
+
+ v := new(enablementsJSON)
+ if err := json.Unmarshal(data, &v); err != nil {
+ return err
+ }
+
+ var ve system.Enablement
+ if v.Wayland {
+ ve |= system.EWayland
+ }
+ if v.X11 {
+ ve |= system.EX11
+ }
+ if v.DBus {
+ ve |= system.EDBus
+ }
+ if v.Pulse {
+ ve |= system.EPulse
+ }
+ *e = Enablements(ve)
+ return nil
+}