Skip to content

Instantly share code, notes, and snippets.

@tomjack
Created March 20, 2012 18:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomjack/f8fb9171f39fb4ebf5d2 to your computer and use it in GitHub Desktop.
Save tomjack/f8fb9171f39fb4ebf5d2 to your computer and use it in GitHub Desktop.
user> (def thrift-meta-data {"FooValue" {:key-set [{:field-id "foo" :field-name "bar"}]}})
#'user/thrift-meta-data
user> (defmacro mk-property-tap [property-id property-name property-class]
(let [md (thrift-meta-data (str property-class "Value"))]
(for [f (:key-set md)]
(let [val-id (:field-id f)
val-name (:field-name f)
fn-name (symbol (str property-name "-" val-name "-tap"))]
`(defn ~fn-name [source-dir#]
(let [tap# (split-data-tap source-dir# [~property-id val-id#])]
(<- [?id ?property ?pedigree]
(tap# _ ?data)
(expand-data ?data :> ?pedigree ?du)
(expand-property ?du :> ?id ?property))))))))
#'user/mk-property-tap
user> (macroexpand-1 '(mk-property-tap "blah" "blarg" "Foo"))
((clojure.core/defn blarg-bar-tap [source-dir__1782__auto__] (clojure.core/let [tap__1783__auto__ (user/split-data-tap source-dir__1782__auto__ ["blah" val-id__1784__auto__])] (user/<- [user/?id user/?property user/?pedigree] (tap__1783__auto__ user/_ user/?data) (user/expand-data user/?data :> user/?pedigree user/?du) (user/expand-property user/?du :> user/?id user/?property)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment