(config: Option<&ExecConfig>)
| 228 | } |
| 229 | |
| 230 | pub fn execute(config: Option<&ExecConfig>) -> Vec<u8> { |
| 231 | let Some(cfg) = config else { |
| 232 | return vec![CODE_EXECUTE, 0, 0, 0, 9, 0, 0, 0, 0, 0]; |
| 233 | }; |
| 234 | |
| 235 | if cfg.portal.as_ref().is_none_or(|p| p.is_empty()) && cfg.rows.unwrap_or(0) == 0 { |
| 236 | return vec![CODE_EXECUTE, 0, 0, 0, 9, 0, 0, 0, 0, 0]; |
| 237 | } |
| 238 | |
| 239 | let portal = cfg.portal.as_deref().unwrap_or(""); |
| 240 | let rows = cfg.rows.unwrap_or(0); |
| 241 | |
| 242 | let portal_length = byte_length_utf8(portal); |
| 243 | let len = 4 + portal_length + 1 + 4; |
| 244 | let mut buffer = vec![0u8; 1 + len]; |
| 245 | buffer[0] = CODE_EXECUTE; |
| 246 | let len_bytes = (len as i32).to_be_bytes(); |
| 247 | buffer[1..5].copy_from_slice(&len_bytes); |
| 248 | buffer[5..5 + portal_length].copy_from_slice(portal.as_bytes()); |
| 249 | buffer[5 + portal_length] = 0; |
| 250 | let row_bytes = rows.to_be_bytes(); |
| 251 | let end = buffer.len(); |
| 252 | buffer[end - 4..].copy_from_slice(&row_bytes); |
| 253 | buffer |
| 254 | } |
| 255 | |
| 256 | pub fn describe(target: &PortalTarget) -> Vec<u8> { |
| 257 | let mut writer = BufferWriter::default(); |
no test coverage detected