$requested_changes */ public function apply( Settings $saved, array $requested_changes ): Settings { $rules = $this->rules; $changes = new ChangedFields( $requested_changes, self::TOP_LEVEL_FIELDS ); $quiet_hours = $changes->group( self::QUIET_HOURS_GROUP, self::QUIET_HOURS_FIELDS ); $database = $changes->group( self::DATABASE_GROUP, self::DATABASE_FIELDS ); return new Settings( check_posts: $rules->switch_state( $changes->value_or( 'check_posts', $saved->check_posts ) ), check_pages: $rules->switch_state( $changes->value_or( 'check_pages', $saved->check_pages ) ), check_media: $rules->switch_state( $changes->value_or( 'check_media', $saved->check_media ) ), editor_warning: $rules->switch_state( $changes->value_or( 'editor_warning', $saved->editor_warning ) ), email_enabled: $rules->switch_state( $changes->value_or( 'email_enabled', $saved->email_enabled ) ), email_to: $rules->email_address( $changes->value_or( 'email_to', $saved->email_to ) ), skip_hosts: $rules->skipped_hosts( $changes->value_or( 'skip_hosts', $saved->skip_hosts ) ), quiet_hours_enabled: $rules->switch_state( $quiet_hours->value_or( 'enabled', $saved->quiet_hours_enabled ) ), quiet_hours_from: $rules->clock_time( $quiet_hours->value_or( 'from', $saved->quiet_hours_from ) ), quiet_hours_to: $rules->clock_time( $quiet_hours->value_or( 'to', $saved->quiet_hours_to ) ), pause_at_ms: $rules->pause_milliseconds( $database->value_or( 'pause_at_ms', $saved->pause_at_ms ) ), batch_size: $rules->batch_size( $database->value_or( 'batch_size', $saved->batch_size ) ) ); } }