MCPcopy Create free account
hub / github.com/f0rr0/oliphaunt / bind

Method bind

src/protocol/serializer.rs:186–228  ·  view source on GitHub ↗
(config: &BindConfig)

Source from the content-addressed store, hash-verified

184 }
185
186 pub fn bind(config: &BindConfig) -> Vec<u8> {
187 let mut writer = BufferWriter::default();
188 let mut param_writer = BufferWriter::default();
189
190 let portal = config.portal.as_deref().unwrap_or("");
191 let statement = config.statement.as_deref().unwrap_or("");
192 let values = &config.values;
193 let len = values.len() as i16;
194
195 writer.add_cstring(portal).add_cstring(statement);
196 writer.add_int16(len);
197
198 for (idx, value) in values.iter().enumerate() {
199 let mapped = if let Some(mapper) = &config.value_mapper {
200 mapper(value, idx)
201 } else {
202 value.clone()
203 };
204
205 match mapped {
206 BindValue::Null => {
207 writer.add_int16(0);
208 param_writer.add_int32(-1);
209 }
210 BindValue::Binary(bytes) => {
211 writer.add_int16(1);
212 param_writer.add_int32(bytes.len() as i32);
213 param_writer.add_bytes(&bytes);
214 }
215 BindValue::Text(text) => {
216 writer.add_int16(0);
217 param_writer.add_int32(byte_length_utf8(&text) as i32);
218 param_writer.add_string(&text);
219 }
220 }
221 }
222
223 writer.add_int16(len);
224 let param_body = param_writer.flush(None);
225 writer.add_bytes(&param_body);
226 writer.add_int16(if config.binary { 1 } else { 0 });
227 writer.flush(Some(CODE_BIND))
228 }
229
230 pub fn execute(config: Option<&ExecConfig>) -> Vec<u8> {
231 let Some(cfg) = config else {

Calls 9

byte_length_utf8Function · 0.85
lenMethod · 0.80
iterMethod · 0.80
add_cstringMethod · 0.45
add_int16Method · 0.45
add_int32Method · 0.45
add_bytesMethod · 0.45
add_stringMethod · 0.45
flushMethod · 0.45

Tested by

no test coverage detected