Implement dataset as a protocol