Disable lint as it does not work well with drop
(
state_ref: &StateRef,
senders: &Senders,
mut message: SubmitRequest,
)
| 136 | |
| 137 | #[allow(clippy::await_holding_refcell_ref)] // Disable lint as it does not work well with drop |
| 138 | pub(crate) fn handle_submit( |
| 139 | state_ref: &StateRef, |
| 140 | senders: &Senders, |
| 141 | mut message: SubmitRequest, |
| 142 | ) -> ToClientMessage { |
| 143 | log_submit_request(&message); |
| 144 | |
| 145 | let mut state = state_ref.get_mut(); |
| 146 | if let Some(err) = validate_submit( |
| 147 | message.job_id.and_then(|job_id| state.get_job(job_id)), |
| 148 | &message.submit_desc.task_desc, |
| 149 | ) { |
| 150 | return ToClientMessage::SubmitResponse(err); |
| 151 | } |
| 152 | |
| 153 | let (job_id, new_job) = if let Some(job_id) = message.job_id { |
| 154 | if let Some(job) = state.get_job(job_id) { |
| 155 | if !job.is_open() { |
| 156 | return ToClientMessage::SubmitResponse(SubmitResponse::JobNotOpened); |
| 157 | } |
| 158 | match &mut message.submit_desc.task_desc { |
| 159 | JobTaskDescription::Array { ids, entries, .. } => { |
| 160 | if ids.is_empty() { |
| 161 | let new_id = job.max_id().map(|x| x.as_num() + 1).unwrap_or(0); |
| 162 | if let Some(entries) = entries { |
| 163 | *ids = |
| 164 | IntArray::from_range(new_id, new_id + entries.len() as JobTaskCount) |
| 165 | } else { |
| 166 | *ids = IntArray::from_id(new_id) |
| 167 | } |
| 168 | } |
| 169 | } |
| 170 | JobTaskDescription::Graph { .. } => {} |
| 171 | } |
| 172 | } else { |
| 173 | return ToClientMessage::SubmitResponse(SubmitResponse::JobNotFound); |
| 174 | } |
| 175 | (job_id, false) |
| 176 | } else { |
| 177 | match &mut message.submit_desc.task_desc { |
| 178 | JobTaskDescription::Array { ids, entries, .. } => { |
| 179 | /* Try filling task ids */ |
| 180 | if ids.is_empty() { |
| 181 | if let Some(entries) = entries { |
| 182 | *ids = IntArray::from_range(0, entries.len() as JobTaskCount) |
| 183 | } else { |
| 184 | *ids = IntArray::from_id(0) |
| 185 | } |
| 186 | } |
| 187 | } |
| 188 | JobTaskDescription::Graph { .. } => { /* Do nothing */ } |
| 189 | } |
| 190 | (state.new_job_id(), true) |
| 191 | }; |
| 192 | |
| 193 | senders.events.on_job_submitted(job_id, &message).unwrap(); |
| 194 | |
| 195 | let SubmitRequest { |
no test coverage detected