implement enum