You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.

Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

Simple-Configuration aka Sexp-Configuration

Introduction

This is a small library to handle configurations in a simple manner. It uses lists as the basic datastructure to hold configurations.

Examples

(use simple-configuration)

(define my-config
 '((production
    (database
      (username "prod")
      (password "prodpwd")
      (host "test.example.com")))
   (development
    (database
      (username "dev")
      (password "devpwd")
      (host "dev.example.com")))
  (logging
   (destination "/var/log/application.log")
   (levels (error warning)))))

;; now you can access the data like so

(config-ref my-config '(production database username)) ;; => "prod"
(config-ref my-config '(production database))          ;; => (username "prod")
(config-ref my-config '(production database))   ;; => ((username "prod") (password "prodpwd") (host "test.example.com"))

(config-let my-config ((db-user (production database username))
                       (db-pw   (production database password))
                       (db-host (production database host)))
  (connect-to-database db-host db-user db-pw))

;; postprocess data
(config-ref my-config '(logging levels) post-process: (lambda (ls) (cons 'critical ls))) ;; => (critical error warning)

Authors

David Krentzlin

Api

[procedure] (config-read port-or-path #!key (eval-config #f))

Reads the configuration from the given port or path. If eval-config is set to #t then the entire config is evaled inside a quasiquote. This means you can do something like this:

  ((some-key ,(+ 10 20))

If you reference the key some-key you will get 30.

[procedure] (config-ref cfg path #!key (default #f) (post-process identity))

Extract a value from the configuration. Note that post-process is applied to the default-value as well.

[syntax] (config-let config ((binding path) ...) body ...)

This binds bindings to their values. It's really just a convenient way to reference multiple paths.