]> git.jsancho.org Git - guile-click.git/blobdiff - click/util.scm
Type conversion
[guile-click.git] / click / util.scm
index e83e15319a915d16cb43e2ab4cfc14efe207126b..c3ac062cd606aeff46bf46a1bfc03cc58d35055a 100644 (file)
 
 
 (define-module (click util)
-  #:use-module (ice-9 getopt-long)
-  #:use-module (ice-9 readline)
   #:use-module (click constant)
   #:export (getopt-long-option-spec
-            get-option-default-value
-            get-values
-            option-default-value
             option-property
+            option-type
             program-name
             %program-name))
 
@@ -34,7 +30,9 @@
 (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 (get-values option-spec values)
-  "Return an associated list with values for all the options in option-spec"
-  (cond ((null? option-spec)
-         '())
-        (else
-         (let* ((option (car option-spec))
-                (option-name (car option))
-                (value (or (option-ref values option-name #f)
-                           (get-option-default-value option))))
-           (cons (cons option-name value)
-                 (get-values (cdr option-spec) values))))))
 
+;; 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* (get-option-default-value option #:optional (no-prompt #f))
-  "Get value for option, asking user if prompt property is set"
+(define (option-type option)
+  "Return allowed type for the value in the option"
   (let ((default (option-property option 'default)))
-    (if (not default)
-        (let ((prompt (option-property option 'prompt)))
-          (if prompt
-              (readline (format #f "~a: " prompt))
-              default))
-        default)))
+    (cond ((not default)
+           TYPE-TEXT)
+          ((integer? default)
+           TYPE-INTEGER)
+          ((number? default)
+           TYPE-NUMBER)
+          (else
+           TYPE-TEXT))))