diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-02-17 19:00:43 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-02-17 19:00:43 +0900 |
| commit | 90cb01b2748550228d0bc179691a19ebb996fc36 (patch) | |
| tree | 06a2e17b578312c3f0734bf4c476e3c2eb5f6908 /system/enablement.go | |
| parent | b1e1d5627e6532ec719c761846d7f38fe93fcadd (diff) | |
system: move out of internal
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'system/enablement.go')
| -rw-r--r-- | system/enablement.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/system/enablement.go b/system/enablement.go new file mode 100644 index 00000000..f0911d54 --- /dev/null +++ b/system/enablement.go @@ -0,0 +1,68 @@ +package system + +import ( + "strings" +) + +type ( + // Enablement represents an optional system resource + Enablement uint8 + // Enablements represents optional system resources to share + Enablements uint64 +) + +const ( + EWayland Enablement = iota + EX11 + EDBus + EPulse +) + +var enablementString = [...]string{ + EWayland: "Wayland", + EX11: "X11", + EDBus: "D-Bus", + EPulse: "PulseAudio", +} + +const ELen = len(enablementString) + +func (e Enablement) String() string { + if int(e) >= ELen { + return "<invalid enablement>" + } + return enablementString[e] +} + +func (e Enablement) Mask() Enablements { + return 1 << e +} + +// Has returns whether a feature is enabled +func (es *Enablements) Has(e Enablement) bool { + return *es&e.Mask() != 0 +} + +// Set enables a feature +func (es *Enablements) Set(e Enablement) { + if es.Has(e) { + panic("enablement " + e.String() + " set twice") + } + + *es |= e.Mask() +} + +func (es *Enablements) String() string { + buf := new(strings.Builder) + for i := Enablement(0); i < Enablement(ELen); i++ { + if es.Has(i) { + buf.WriteString(", " + i.String()) + } + } + + if buf.Len() == 0 { + buf.WriteString("(No enablements)") + } + + return strings.TrimPrefix(buf.String(), ", ") +} |
