config.scm 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. (library (config)
  2. (export load-config-file
  3. load-config-files
  4. get-configuration)
  5. (import
  6. (except (rnrs base) let-values map error)
  7. (only (guile)
  8. lambda* λ map)
  9. ;; third party libs
  10. (json)
  11. ;; custom libraries
  12. (prefix (lib logger) log:)
  13. (lib fileio)
  14. (lib filesystem)
  15. (fslib)
  16. (model)
  17. (data-abstraction)))
  18. ;; =============
  19. ;; CONFIGURATION
  20. ;; =============
  21. (define json-file-extension?
  22. (λ (fname)
  23. (string=? (file-extension fname) "json")))
  24. (define load-config-file
  25. (λ (loc)
  26. (get-document-from-file loc json->scm)))
  27. (define load-config-files
  28. (λ (dir names)
  29. (map (λ (fname)
  30. (let ([full-location (fsing-join dir fname)])
  31. ;; make an alist
  32. (cons (file-name fname)
  33. (load-config-file full-location))))
  34. names)))
  35. (define get-configuration
  36. (lambda* (#:key
  37. (transportation-config-dir (fsing-join "config" "transportation"))
  38. (player-config-dir (fsing-join "config" "player"))
  39. (general-config-dir "config"))
  40. (let ([transportation-configs
  41. (load-config-files
  42. transportation-config-dir
  43. (get-files-from-directory transportation-config-dir
  44. #:filter-proc json-file-extension?))]
  45. [player-configs
  46. (load-config-files
  47. player-config-dir
  48. (get-files-from-directory player-config-dir
  49. #:filter-proc json-file-extension?))]
  50. [general-config
  51. (load-config-file
  52. (fsing-join general-config-dir "general.json"))])
  53. (values transportation-configs
  54. player-configs
  55. general-config))))