in akd_mysql/src/mysql_storables.rs [139:205]
fn set_batch_params(items: &[DbRecord]) -> Result<mysql_async::Params> {
let param_batch = items
.iter()
.enumerate()
.map(|(idx, item)| match &item {
DbRecord::Azks(azks) => Ok(vec![
("key".to_string(), Value::from(1u8)),
("epoch".to_string(), Value::from(azks.latest_epoch)),
("num_nodes".to_string(), Value::from(azks.num_nodes)),
]),
DbRecord::HistoryNodeState(state) => {
if let Ok(bin_data) = bincode::serialize(&state.child_states) {
let id = state.get_id();
Ok(vec![
(format!("label_len{}", idx), Value::from(id.0.len)),
(format!("label_val{}", idx), Value::from(id.0.val)),
(format!("epoch{}", idx), Value::from(id.1)),
(format!("value{}", idx), Value::from(state.value)),
(format!("child_states{}", idx), Value::from(bin_data)),
])
} else {
Err(MySqlError::Other("Failed to serialize child states".into()))
}
}
DbRecord::HistoryTreeNode(node) => Ok(vec![
(format!("label_len{}", idx), Value::from(node.label.len)),
(format!("label_val{}", idx), Value::from(node.label.val)),
(format!("birth_epoch{}", idx), Value::from(node.birth_epoch)),
(format!("last_epoch{}", idx), Value::from(node.last_epoch)),
(
format!("parent_label_len{}", idx),
Value::from(node.parent.len),
),
(
format!("parent_label_val{}", idx),
Value::from(node.parent.val),
),
(
format!("node_type{}", idx),
Value::from(node.node_type as u8),
),
]),
DbRecord::ValueState(state) => Ok(vec![
(format!("username{}", idx), Value::from(state.get_id().0)),
(format!("epoch{}", idx), Value::from(state.epoch)),
(format!("version{}", idx), Value::from(state.version)),
(
format!("node_label_len{}", idx),
Value::from(state.label.len),
),
(
format!("node_label_val{}", idx),
Value::from(state.label.val),
),
(
format!("data{}", idx),
Value::from(state.plaintext_val.0.clone()),
),
]),
})
.into_iter()
.collect::<Result<Vec<_>>>()?
.into_iter()
.flatten()
.collect::<Vec<_>>();
Ok(mysql_async::Params::from(param_batch))
}