Hi Clojurers,

I'm writing a capability system with Clojure. Make a request to a URL, it 
grabs the "plan" for what it should do from the database. A plan consists 
(eventually) of atomic "steps". Typical example of a step would be "make an 
HTTP request", represented by a map like {:type :http :url 
"http://www.example.test"; :method "GET"}.

I would like to allow people to implement different types of steps (http, 
delays, e-mail, ftp...), ideally by modifying as little existing code as 
possible. Step implementations have two parts:

- a step handler (better name suggestions welcome...): a function that 
takes a step map of the appropriate type, producing a channel that will 
eventually have a result posted on it and be closed
- a step schema (a prismatic/schema schema), describing the step map.

Right now I manage both of these manually. That works fine, because the 
only thing I've implemented so far is HTTP requests ;-)

I briefly considered protocols for this; perhaps a protocol with a handler 
fn and the schema, but AFAIK protocols only know about their extenders, not 
so much about their implementations. (Even with manual registration, a 
protocol may still be an appropriate tool.) Plus, that wouldn't solve the 
problem of dispatching based on type (i.e., given a map like the example 
above, find the handler function that can do something with it).

This project is in its earliest stages, so I am very eager to hear about 
wildly different suggestions as well :)


thanks in advance
lvh

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to