Last active
August 19, 2024 18:33
-
-
Save darkleaf/d5f8869b47a1a2688b05e154cbf40c42 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns example.core | |
(:require | |
[darkleaf.di.core :as di]) | |
(:import | |
(io.helidon.http Method) | |
(io.helidon.http.sse SseEvent) | |
(io.helidon.webserver WebServer WebServerConfig$Builder) | |
(io.helidon.webserver.http | |
HttpRouting$Builder Handler | |
ServerRequest ServerResponse) | |
(io.helidon.webserver.sse SseSink) | |
(java.util.function Consumer))) | |
(set! *warn-on-reflection* true) | |
(defmacro ..* | |
"form => fieldName-symbol or (instanceMethodName-symbol args*) | |
Expands into a member access (.) of the first member on the first | |
argument, followed by the next member on the result, etc. For | |
instance: | |
(.. System (getProperties) (get \"os.name\")) | |
expands to: | |
(. (. System (getProperties)) (get \"os.name\")) | |
but is easier to write, read, and understand." | |
{:added "1.0"} | |
([x form] | |
;; подумать как лучше сделать | |
(let [tag (-> form meta :tag)] | |
(cond-> `(. ~x ~form) | |
(some? tag) (with-meta {:tag tag})))) | |
([x form & more] | |
`(..* (..* ~x ~form) ~@more))) | |
(defn server | |
{::di/stop WebServer/.stop | |
::di/kind :component} | |
[{^Consumer routing `routing}] | |
(..* WebServer | |
builder | |
^WebServerConfig$Builder | |
(port 8080) | |
^WebServerConfig$Builder | |
(routing routing) | |
(build) | |
(start))) | |
(defn ->handler ^Handler [f] | |
(reify Handler | |
(handle [_ req res] | |
(f req res)))) | |
(defn routing [{root `root} ^HttpRouting$Builder it] | |
(.. it | |
(route Method/GET (->handler root)))) | |
(defn root [-deps ^ServerRequest req ^ServerResponse res] | |
(with-open [sseSink (.. res (sink SseSink/TYPE))] | |
(dotimes [i 10] | |
(Thread/sleep 1000) | |
(.. sseSink (emit (SseEvent/create (str "hello " i))))))) | |
#_ | |
(.. Thread | |
ofVirtual | |
(start (fn [] | |
(Thread/sleep 3000) | |
(.. res (send "Hello World 4 !"))))) | |
(comment | |
(def system (di/start `server)) | |
(di/stop system) | |
(require '[clojure.repl.deps :as repl.deps]) | |
(repl.deps/sync-deps) | |
,,,) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{:paths ["src"] | |
:deps {org.clojure/clojure {:mvn/version "1.12.0-rc1"} | |
org.clojars.darkleaf/di {:mvn/version "3.0.0"} | |
io.helidon.webserver/helidon-webserver {:mvn/version "4.1.0"} | |
io.helidon.webserver/helidon-webserver-sse {:mvn/version "4.1.0"} | |
#_#_ | |
squint/squint {:git/url "https://github.com/squint-cljs/squint" | |
:git/sha "d453309a565ab6a02592ca4a7f88bad5c82b34a5"}}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment