Function: soap-xs-add-restriction

soap-xs-add-restriction is a byte-compiled function defined in soap-client.el.gz.

Signature

(soap-xs-add-restriction NODE TYPE)

Documentation

Add restrictions defined in XML NODE to TYPE, an soap-xs-simple-type.

Source Code

;; Defined in /usr/src/emacs/lisp/net/soap-client.el.gz
(defun soap-xs-add-restriction (node type)
  "Add restrictions defined in XML NODE to TYPE, an `soap-xs-simple-type'."

  (cl-assert (eq (soap-l2wk (xml-node-name node)) 'xsd:restriction)
             nil
             "expecting xsd:restriction node, got %s"
             (soap-l2wk (xml-node-name node)))

  (setf (soap-xs-simple-type-base type)
        (soap-l2fq (xml-get-attribute node 'base)))

  (dolist (r (xml-node-children node))
    (unless (stringp r)                 ; skip the white space
      (let ((value (xml-get-attribute r 'value)))
        (cl-case (soap-l2wk (xml-node-name r))
          (xsd:enumeration
           (push value (soap-xs-simple-type-enumeration type)))
          (xsd:pattern
           (setf (soap-xs-simple-type-pattern type)
                 (concat "\\`" (xsdre-translate value) "\\'")))
          (xsd:length
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-length-range type)
                   (cons value value))))
          (xsd:minLength
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-length-range type)
                   (if (soap-xs-simple-type-length-range type)
                       (cons value
                             (cdr (soap-xs-simple-type-length-range type)))
                     ;; else
                     (cons value nil)))))
          (xsd:maxLength
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-length-range type)
                   (if (soap-xs-simple-type-length-range type)
                       (cons (car (soap-xs-simple-type-length-range type))
                             value)
                     ;; else
                     (cons nil value)))))
          (xsd:minExclusive
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-integer-range type)
                   (if (soap-xs-simple-type-integer-range type)
                       (cons (1+ value)
                             (cdr (soap-xs-simple-type-integer-range type)))
                     ;; else
                     (cons (1+ value) nil)))))
          (xsd:maxExclusive
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-integer-range type)
                   (if (soap-xs-simple-type-integer-range type)
                       (cons (car (soap-xs-simple-type-integer-range type))
                             (1- value))
                     ;; else
                     (cons nil (1- value))))))
          (xsd:minInclusive
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-integer-range type)
                   (if (soap-xs-simple-type-integer-range type)
                       (cons value
                             (cdr (soap-xs-simple-type-integer-range type)))
                     ;; else
                     (cons value nil)))))
          (xsd:maxInclusive
           (let ((value (string-to-number value)))
             (setf (soap-xs-simple-type-integer-range type)
                   (if (soap-xs-simple-type-integer-range type)
                       (cons (car (soap-xs-simple-type-integer-range type))
                             value)
                     ;; else
                     (cons nil value))))))))))