diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-15 04:57:37 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-15 05:16:51 +0900 |
| commit | 4ffeec3004607b76f73e504da220a1490c598348 (patch) | |
| tree | 68cca16c22814b13974db0f19c151f8eb31e2dae /hst/enablement.go | |
| parent | 9ed3ba85eaba4bc4bd12b290dc4daf00ffe159dc (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.go | 69 |
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 +} |
