完成Protocol的宏，但还需要详细测试