config_list.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package config
  2. import (
  3. "sort"
  4. )
  5. type ConfigsSort struct {
  6. Key string
  7. Order string
  8. ConfigList []Config
  9. }
  10. func boolToInt(b bool) int {
  11. if b {
  12. return 1
  13. }
  14. return 0
  15. }
  16. func (c ConfigsSort) Len() int {
  17. return len(c.ConfigList)
  18. }
  19. func (c ConfigsSort) Less(i, j int) bool {
  20. flag := false
  21. switch c.Key {
  22. case "name":
  23. flag = c.ConfigList[i].Name > c.ConfigList[j].Name
  24. case "modified_at":
  25. flag = c.ConfigList[i].ModifiedAt.After(c.ConfigList[j].ModifiedAt)
  26. case "is_dir":
  27. flag = boolToInt(c.ConfigList[i].IsDir) > boolToInt(c.ConfigList[j].IsDir)
  28. case "enabled":
  29. flag = boolToInt(c.ConfigList[i].Enabled) > boolToInt(c.ConfigList[j].Enabled)
  30. }
  31. if c.Order == "asc" {
  32. flag = !flag
  33. }
  34. return flag
  35. }
  36. func (c ConfigsSort) Swap(i, j int) {
  37. c.ConfigList[i], c.ConfigList[j] = c.ConfigList[j], c.ConfigList[i]
  38. }
  39. func Sort(key string, order string, configs []Config) []Config {
  40. configsSort := ConfigsSort{
  41. Key: key,
  42. ConfigList: configs,
  43. Order: order,
  44. }
  45. sort.Sort(configsSort)
  46. return configsSort.ConfigList
  47. }