add generic builder and throwable validator