Clojure: Как добавить скалярный тип в схему lacinia Graphql в формате edn? - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу определить скалярный тип, такой как Token

, если я определю Token в следующем формате, он не будет скомпилирован

:scalars
  {:Token }

Согласно https://lacinia.readthedocs.io/en/latest/custom-scalars.html, мне нужнодать функции parse и seririase

Итак, я изменил код ниже,

 :scalars
   {:Token 
     {:parse #(str %)
      :serialize #(str %)
     }
   }

Теперь я получаю сообщение об ошибке "Нет макроса отправки для: ("

Как я могуопределить токен скалярного типа как "скалярный токен"?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Спасибо @madstap за ответ, код комментария неправильно выделен.

В преобразованиях я обнаружил, что необходимо вернуть spec, следующий код работал

(def token-parser
  (s/conformer
   (fn [^String v]
     (str v))))

(def token-serializer
  (s/conformer 
   (fn [^String v]
     (str v))))

(util/attach-scalar-transformers
        {:token-parser token-parser
         :token-serializer token-serializer
         })
0 голосов
/ 18 декабря 2018

Как говорит nha в комментариях, вы не можете иметь функциональные литералы в файлах edn.Если вы переместите это в файл .clj, он будет работать.

Если вы хотите сохранить схему как файл .edn, для этого есть функция com.walmartlabs.lacinia.util/attach-scalar-transformers.

schema.edn:

{,,,
 :scalars
 {:Token {:parse :token-parser
          :serialize :token-serializer}}}

schema.clj

(ns foo.schema
  (:require
   [??? :refer [slurp-edn]]
   [com.walmartlabs.lacinia.schema :as schema]
   [com.walmartlabs.lacinia.util :as util]))

(def transforms
  {:token-parser #(,,,)
   :token-serializer #(,,,)})

(defn schema []
  (-> (slurp-edn "schema.edn")
      (util/attach-scalar-transformers transforms)
      ;; ... attach resolvers, compile schema, etc
      ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...