diff --git a/src/babashka/pods.clj b/src/babashka/pods.clj index 54e32bd..964a6c9 100644 --- a/src/babashka/pods.clj +++ b/src/babashka/pods.clj @@ -6,9 +6,9 @@ ([pod-spec opts] (jvm/load-pod pod-spec opts))) (defn unload-pod - ([pod-id] (unload-pod pod-id {})) - ([pod-id opts] (jvm/unload-pod pod-id opts))) + ([pod-id-or-pod] (unload-pod pod-id-or-pod {})) + ([pod-id-or-pod opts] (jvm/unload-pod pod-id-or-pod opts))) (defn invoke - ([pod-id sym args] (invoke pod-id sym args {})) - ([pod-id sym args opts] (jvm/invoke pod-id sym args opts))) + ([pod-id-or-pod sym args] (invoke pod-id-or-pod sym args {})) + ([pod-id-or-pod sym args opts] (jvm/invoke pod-id-or-pod sym args opts))) diff --git a/src/babashka/pods/impl.clj b/src/babashka/pods/impl.clj index 5b6fec1..6d894ec 100644 --- a/src/babashka/pods/impl.clj +++ b/src/babashka/pods/impl.clj @@ -190,22 +190,28 @@ (def pods (atom {})) +(defn get-pod-id [x] + (if (map? x) + (:pod/id x) + x)) + (defn lookup-pod [pod-id] (get @pods pod-id)) -(defn destroy [pod-id] - (when-let [pod (lookup-pod pod-id)] - (if (contains? (:ops pod) :shutdown) - (do (write (:stdin pod) - {"op" "shutdown" - "id" (next-id)}) - (.waitFor ^Process (:process pod))) - (.destroy ^Process (:process pod))) - (when-let [rns (:remove-ns pod)] - (doseq [[ns-name _] (:namespaces pod)] - (rns ns-name)))) - (swap! pods dissoc pod-id) - nil) +(defn destroy [pod-id-or-pod] + (let [pod-id (get-pod-id pod-id-or-pod)] + (when-let [pod (lookup-pod pod-id)] + (if (contains? (:ops pod) :shutdown) + (do (write (:stdin pod) + {"op" "shutdown" + "id" (next-id)}) + (.waitFor ^Process (:process pod))) + (.destroy ^Process (:process pod))) + (when-let [rns (:remove-ns pod)] + (doseq [[ns-name _] (:namespaces pod)] + (rns ns-name)))) + (swap! pods dissoc pod-id) + nil)) (def next-pod-id (let [counter (atom 0)] @@ -332,8 +338,9 @@ @prom)) (defn invoke-public [pod-id fn-sym args opts] - (let [pod (lookup-pod pod-id)] + (let [pod-id (get-pod-id pod-id) + pod (lookup-pod pod-id)] (invoke pod fn-sym args opts))) -(defn unload-pod [pod-id] - (destroy pod-id)) +(defn unload-pod [pod-id-or-pod] + (destroy pod-id-or-pod))