split into two project to make macros work
add api and test case