refactor field decoder
add callback