provide with-struct macro, fixes #54