【发布时间】:2017-04-24 21:03:40
【问题描述】:
当我的记录具有如下定义的模式时:
(schema.core/defrecord Account [id :- schema/Uuid
short-id :- schema/Str
name :- schema/Str
created-at :- schema/Inst])
如何提取架构以应用于包含这些值的哈希映射?
原因是 HTTP 服务接收地图并自动将架构应用到它们,如果我只使用 Account,它会失败,因为地图不是 Account 类型。
我试图从解释中提取,如:
(schema.core/explain Account)
但我得到的并不是真正的架构:
{:id Uuid,
:short-id Str,
:name Str,
:created-at Inst}
这些值是符号而不是类,所以,如果你尝试使用它:
(schema.core/validate (last (schema.core/explain server.models.account.Account)) {})
你得到这个错误:
IllegalArgumentException No implementation of method: :spec of protocol: #'schema.core/Schema found for class: clojure.lang.Symbol clojure.core/-cache-protocol-fn (core_deftype.clj:568)
【问题讨论】:
-
您在问如何从记录定义中提取此架构,或者如何为地图构造等效架构?
-
@fl00r 如何从记录中提取它,这样我就不必手动重新创建它。我会修改问题。