open struct should recurse over arrays
switch keys to methods
cache the channel aside