-
Notifications
You must be signed in to change notification settings - Fork 0
/
version.go
58 lines (51 loc) · 1.6 KB
/
version.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package sway
import (
"encoding/json"
// "fmt"
)
// Version describes an sway version.
//
// See https://swaywm.org/docs/ipc.html#_version_reply for more details.
type Version struct {
Major int64 `json:"major"`
Minor int64 `json:"minor"`
Patch int64 `json:"patch"`
HumanReadable string `json:"human_readable"`
LoadedConfigFileName string `json:"loaded_config_file_name"`
}
// GetVersion returns sway’s version.
//
// GetVersion is supported in i3 ≥ v4.3 (2012-09-19).
func GetVersion() (Version, error) {
reply, err := roundTrip(messageTypeGetVersion, nil)
if err != nil {
return Version{}, err
}
var v Version
err = json.Unmarshal(reply.Payload, &v)
return v, err
}
// version is a lazily-initialized, possibly stale copy of sway’s GET_VERSION
// reply. Access only values which don’t change, e.g. Major, Minor.
var version Version
// AtLeast returns nil if sway’s major version matches major and sway’s minor
// version is at least minor or newer. Otherwise, it returns an error message
// stating sway is too old.
func AtLeast(major int64, minor int64) error {
// TODO: probably this
// if major == 0 {
// return fmt.Errorf("BUG: major == 0 is non-sensical. Is a lookup table entry missing?")
// }
// if version.Major == 0 {
// var err error
// version, err = GetVersion()
// if err != nil {
// return err
// }
// }
// if version.Major == major && version.Minor >= minor {
// return nil
// }
// return fmt.Errorf("sway version too old: got %d.%d, want ≥ %d.%d", version.Major, version.Minor, major, minor)
return nil
}