optional doesn't require every field