]> git.jsancho.org Git - guile-click.git/blobdiff - click/util.scm
Nested commands
[guile-click.git] / click / util.scm
index 65ad8627e12579b5a8d072638d0db43ed3b65e33..827a4a9b2e12885fa179317b56dbdfe5d2334638 100644 (file)
   #:use-module (click constant)
   #:export (getopt-long-option-spec
             option-property
-            program-name
-            %program-name))
+            option-type
+           program-name))
 
-(define %program-name (make-fluid "guile"))
-(define (program-name)
-  (fluid-ref %program-name))
 
 (define (getopt-long-option-spec option-spec)
+  "Transform click option spec into getopt-long format"
   (map (lambda (option)
          (cons (car option)
                (cons (list 'value (not (option-property option 'flag)))
                              (cdr option)))))
        option-spec))
 
+
 (define* (option-property option property-name #:optional (default #f))
+  "Return the option property with a given name"
   (let ((property (assq property-name (cdr option))))
     (if property
         (cadr property)
         default)))
+
+
+(define program-name (make-parameter #f))
+
+
+;; Types
+(define TYPE-TEXT
+  `((description . "TEXT")
+    (convert . ,identity)))
+(define TYPE-INTEGER
+  `((description . "INTEGER")
+    (convert . ,string->number)))
+(define TYPE-NUMBER
+  `((description . "NUMBER")
+    (convert . ,string->number)))
+
+(define (option-type option)
+  "Return allowed type for the value in the option"
+  (let ((default (option-property option 'default)))
+    (cond ((not default)
+           TYPE-TEXT)
+          ((integer? default)
+           TYPE-INTEGER)
+          ((number? default)
+           TYPE-NUMBER)
+          (else
+           TYPE-TEXT))))