In unions of modddels, the validate methods also benefit from the shared properties feature and the case-modddels pattern matching.
Continuing with our Weather example (you can find it here), here is an example of an implementation of the validateHabitable method.
@overrideOption<WeatherHabitableFailure> validateHabitable(weather) {// [temperature] is a shared property, so we can directly access it // from [weather] :final temperature = weather.temperature;if (temperature >60) {returnsome(constWeatherHabitableFailure.tooHot()); }if (temperature <-10) {returnsome(constWeatherHabitableFailure.tooCold()); }// You can use the case-modddels pattern matching methods on [weather] :return weather.maybeMapWeather( rainy: (rainy) => rainy.rainIntensity >2.5?some(constWeatherHabitableFailure.flooding()):none(), orElse: () =>none(), );}
In this implementation, the 'habitable' validation will fail under the following conditions :
No matter the weather kind (Sunny or Rainy) : If the temperature is more than 60 or less than -10, the validation fails
For the Rainy weather : If the rainIntensity is more than 2.5, the validation fails.