Redesign the whole library as an annotation processor