z_mirror/fmm
git clone https://git.raiguard.me/z_mirror/fmm
1dcda80
predep-parsing
1package main 2 3import ( 4"encoding/json" 5"io/fs" 6"os" 7) 8 9type ModList struct { 10Mods []ModListMod `json:"mods"` 11path string 12} 13 14type ModListMod struct { 15Name string `json:"name"` 16Enabled bool `json:"enabled"` 17Version * Version `json:"version,omitempty"` 18} 19 20func newModList (path string ) (* ModList ,error ) { 21file ,err := os .ReadFile (path ) 22if err != nil { 23return nil ,err 24 } 25list := ModList {path :path } 26err = json .Unmarshal (file ,& list ) 27if err != nil { 28return nil ,err 29 } 30return & list ,nil 31} 32 33func (l * ModList )isEnabled (name string )bool { 34for i := range l .Mods { 35mod := & l .Mods [i ] 36if mod .Name == name { 37return mod .Enabled 38 } 39 } 40return false 41} 42 43func (l * ModList )save ()error { 44marshaled ,err := json .MarshalIndent (l ,"" ," " ) 45if err != nil { 46return err 47 } 48err = os .WriteFile (l .path ,marshaled ,fs .ModeExclusive ) 49return err 50} 51 52func (l * ModList )add (name string )* ModListMod { 53l .Mods = append (l .Mods ,ModListMod {name ,true ,nil }) 54return & l .Mods [len (l .Mods )- 1 ] 55} 56 57func (l * ModList )disable (name string ) { 58for i := range l .Mods { 59mod := & l .Mods [i ] 60if mod .Name == name { 61mod .Enabled = false 62break 63 } 64 } 65} 66 67func (l * ModList )enable (name string ,version * Version ) { 68for i := range l .Mods { 69mod := & l .Mods [i ] 70if mod .Name == name { 71mod .Enabled = true 72mod .Version = version 73return 74 } 75 } 76// Mod was not found, so add it 77mod := ModListMod {Name :name ,Enabled :true ,Version :version } 78l .Mods = append (l .Mods ,mod ) 79} 80 81func (l * ModList )remove (name string ) { 82for i := range l .Mods { 83mod := & l .Mods [i ] 84if mod .Name != name { 85continue 86 } 87// Why does Go make me do this 88l .Mods = append (l .Mods [:i ],l .Mods [i + 1 :]... ) 89 } 90}