# pp_record
Pretty prints records using record definitions with help of epp.
Almost all of the code is taken from shell.erl where shell commands
`rp` and `rr` are defined.
## How to use it
You read record definitions by using `pp_print:read/1,2` and format an
output with `pp_record:print(Data, Defs)`.
## How to build it
build with `make all`
## Example
Running an example project with a Pooler pool running Riak client
connections. Instead of printing the formatted output in the shell one can simply write it to a file. This is how I normally use it.
```erlang
1> {ok, Defs} = pp_record:read("deps/pooler/src/pooler.erl").
{ok,[{pool,{attribute,24,record,
{pool,[{record_field,25,{atom,25,name}},
{record_field,26,{atom,26,group}},
{record_field,27,{atom,27,max_count},{integer,27,100}},
{record_field,28,{atom,28,init_count},{integer,28,10}},
{record_field,29,{atom,29,start_mfa}},
{record_field,30,{atom,30,free_pids},{nil,30}},
{record_field,31,{atom,31,in_use_count},{integer,31,0}},
{record_field,32,{atom,32,free_count},{integer,32,0}},
{record_field,39,{atom,39,add_member_retry},{integer,39,1}},
{record_field,44,
{atom,44,cull_interval},
{tuple,44,[{...}|...]}},
{record_field,46,{atom,46,max_age},{tuple,46,[...]}},
{record_field,49,{atom,49,member_sup}},
{record_field,53,{atom,53,...}},
{record_field,62,{atom,...},{...}},
{record_field,68,{...},...},
{record_field,74,...},
{record_field,...},
{...}|...]}}}]}
2> io:format("~s~n", [pp_record:print(sys:get_state(whereis(pool)), Defs)]).
#pool{name = pool,group = undefined,max_count = 2000,
init_count = 10,
start_mfa = {apa,riak_worker_start_link,[]},
free_pids = [<0.77.0>,<0.76.0>,<0.75.0>,<0.74.0>,<0.73.0>,
<0.72.0>,<0.71.0>,<0.70.0>,<0.69.0>,<0.66.0>],
in_use_count = 0,free_count = 10,add_member_retry = 1,
cull_interval = {1,min},
max_age = {30,sec},
member_sup = pooler_pool_member_sup,starter_sup = undefined,
all_members = {dict,10,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],
[[<0.66.0>|{#Ref<0.0.0.126>,free,{1447,782741,842698}}]],
[],[],
[[<0.69.0>|{#Ref<0.0.0.133>,free,{1447,782741,843147}}]],
[[<0.70.0>|{#Ref<0.0.0.140>,free,{1447,782741,843615}}]],
[[<0.71.0>|{#Ref<0.0.0.147>,free,{1447,782741,844130}}]],
[[<0.72.0>|{#Ref<0.0.0.154>,free,{1447,782741,844611}}]],
[[<0.73.0>|{#Ref<0.0.0.161>,free,{1447,782741,845061}}]],
[[<0.74.0>|{#Ref<0.0.0.168>,free,{1447,782741,845501}}]],
[[<0.75.0>|{#Ref<0.0.0.175>,free,{1447,782741,845909}}]],
[[<0.76.0>|{#Ref<0.0.0.182>,free,{1447,782741,846342}}]],
[[<0.77.0>|{#Ref<0.0.0.189>,free,{1447,782741,846792}}]],
[],[]}}},
consumer_to_pid = {dict,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}},
starting_members = [],
member_start_timeout = {1,min},
auto_grow_threshold = undefined,
stop_mfa = {erlang,exit,['$pooler_pid',kill]},
metrics_mod = pooler_no_metrics,metrics_api = folsom,
queued_requestors = {[],[]},
queue_max = 50}
```