std.object.framework.write

*transform*

dynamic

+meta-write-exact

+write-template+

added in 3.0

(+write-template+ <cls> <method> <return>)

constructs the write function template

create-write-method-form

added in 3.0

(create-write-method-form ele prefix template select)

create a write method from the template

(-> ^test.Cat ((eval (-> (write/create-write-method-form (reflect/query-class Cat “setName” :#) “set” write/+write-template+ {}) second :fn)) (test.Cat. “spike”) “fluffy”) (.getName)) => “fluffy”

from-constructor

added in 3.0

(from-constructor m {:keys [params default types], :as construct} methods cls)

creates the object from a constructor

(-> {:name “spike”} (write/from-constructor {:fn (fn name(Cat. name)) :params :name} {:name {:type String}} test.Cat)) ;; #test.Cat{:name “spike”, :species “cat”} => test.Cat

from-data

added in 3.0

(from-data arg cls)

creates the object from data

(-> (write/from-data “hello”) seq) => “hello”

from-empty

added in 3.0

(from-empty m empty methods)

creates the object from an empty object constructor

(write/from-empty {:name “chris” :pet “dog”} (fn ) {:name {:type String :fn (fn ^java.util.Hashtable obj v (.put obj “hello” (keyword v)) obj)} :pet {:type String :fn (fn ^java.util.Hashtable obj v (.put obj “pet” (keyword v)) obj)}}) => {“pet” :dog, “hello” :chris}

from-map

added in 3.0

(from-map m cls)

creates the object from a map

(-> {:name “chris” :age 30 :pets [{:name “slurp” :species “dog”} {:name “happy” :species “cat”}]} (write/from-map test.Person) (read/to-data)) => (contains-in {:name “chris”, :age 30, :pets [{:name “slurp”} {:name “happy”}]})

meta-write

added in 3.0

(meta-write cls)

access read-attributes with caching

(write/meta-write DogBuilder) => (contains-in {:class test.DogBuilder :empty fn?, :methods {:name {:type java.lang.String, :fn fn?}}})

meta-write-exact

added in 3.0

(meta-write-exact cls)

access write attributes for the exact class

(write/meta-write-exact Object) => nil

meta-write-exact-raw

(meta-write-exact-raw cls)

helper function for std.object.framework.write/meta-write-exact

meta-write-exact?

added in 3.0

(meta-write-exact? cls)

checks if write attributes are avaliable

(write/meta-write-exact? Object) => false

write-all-fields

added in 3.0

(write-all-fields cls)

all write fields of an object from reflection

(-> (write/write-all-fields {}) keys) => :-hash :-hasheq :-meta :array

write-all-setters

macro

added in 3.0

(write-all-setters cls)(write-all-setters cls opts)

write all setters of an object and base classes

(write/write-all-setters Dog) => {}

(keys (write/write-all-setters DogBuilder)) => :name

write-constructor

added in 3.0

(write-constructor cls params)

returns constructor element for a given class

(write/write-constructor Cat :name) ;;#elemnew :: (java.lang.String) -> test.Cat => ifn?

write-ex

added in 3.0

(write-ex k)

writes a getter method that throws an an exception

((write/write-ex :hello) nil nil) => (throws)

write-fields

added in 3.0

(write-fields cls)(write-fields cls query-fn)

write fields of an object from reflection

(-> (write/write-fields Dog) keys) => :name :species

write-setter-element

added in 3.0

(write-setter-element {:keys [element]} v)

also constructs array elements

(write/write-setter-element {:element Dog} {:name “fido”}) => (contains test.Dog)

write-setter-value

added in 3.0

(write-setter-value methods obj k v)

sets the property given keyword and value

(-> ^test.Cat (write/write-setter-value {:name {:type String :fn (fn ^test.Cat cat name(.setName cat name))}} (Cat. “lido”) :name “tim”) (.getName)) => “tim”

write-setters

macro

added in 3.0

(write-setters cls)(write-setters cls opts)(write-setters cls opts query-fn)

write fields of an object through setter methods

(write/write-setters Dog) => {}

(keys (write/write-setters DogBuilder)) => :name

write-setters-form

added in 3.0

(write-setters-form cls)(write-setters-form cls opts)(write-setters-form cls {:keys [prefix template create select], :or {prefix "set", template +write-template+, create create-write-method-form}} query-fn)

constructs forms for a given object

(write/write-setters-form DogBuilder) => ’{:name {:type java.lang.String, :fn (clojure.core/fn setName obj val (clojure.core/or (. obj (setName val)) obj))}}