У меня есть такая структура:
(defstruct (endpoint (:constructor create-endpoint (name tags values)))
name tags values)
И этот макрос:
(defmacro build-get-endpoint (server db-uri db endpoint)
"constructs a get endpoint that returns all records in the measurement"
(with-gensyms (uri-sym path-sym query-sym route-sym fields)
`(let ((,fields (cons "time" (append (endpoint-tags ,endpoint)
(endpoint-values ,endpoint))))
(,uri-sym (quri:uri ,db-uri))
(,path-sym (format nil "/~a" ,(endpoint-name endpoint)))
(,query-sym (format nil "SELECT ~{~a~^, ~} FROM ~a"
,fields ,(endpoint-name endpoint))))
(setf (quri:uri-path ,uri-sym) "/query")
(setf (quri:uri-query-params ,uri-sym)
(list (cons "q" ,query-sym) (cons "db" ,db)))
(define-route ,server ,path-sym :get
(defview ,route-sym ()
(vom:debug "sending query (~a) to influx" (quri:render-uri ,uri-sym))
(call-influx (dex:get ,uri-sym)
(:no-error (body &rest args)
(declare (ignore args))
(respond (parse-get-response body)
:type "application/json" :status 200))))))))
Но когда я пытаюсь фактически запустить код через:
(build-get-endpoint server (start-opts-db-uri starts)
(start-opts-db-name starts)
(create-endpoint "mood" nil '("value")))
Я получаю ошибку типа, которая говорит, что (create-endpoint "mood" nil '("value"))
не относится к типу ENDPOINT
.
Что я делаю не так?