fn encode_kvp_item()

in src/kvp.rs [372:409]


fn encode_kvp_item(key: &str, value: &str) -> Vec<Vec<u8>> {
    let key_buf = key
        .as_bytes()
        .iter()
        .take(HV_KVP_EXCHANGE_MAX_KEY_SIZE)
        .chain(
            vec![0_u8; HV_KVP_EXCHANGE_MAX_KEY_SIZE.saturating_sub(key.len())]
                .iter(),
        )
        .copied()
        .collect::<Vec<_>>();

    debug_assert!(key_buf.len() == HV_KVP_EXCHANGE_MAX_KEY_SIZE);

    let kvp_slices = value
        .as_bytes()
        .chunks(HV_KVP_AZURE_MAX_VALUE_SIZE)
        .map(|chunk| {
            let mut buffer = Vec::with_capacity(
                HV_KVP_EXCHANGE_MAX_KEY_SIZE + HV_KVP_EXCHANGE_MAX_VALUE_SIZE,
            );
            buffer.extend_from_slice(&key_buf);
            buffer.extend_from_slice(chunk);
            while buffer.len()
                < HV_KVP_EXCHANGE_MAX_KEY_SIZE + HV_KVP_EXCHANGE_MAX_VALUE_SIZE
            {
                buffer.push(0);
            }

            buffer
        })
        .collect::<Vec<Vec<u8>>>();

    debug_assert!(kvp_slices.iter().all(|kvp| kvp.len()
        == HV_KVP_EXCHANGE_MAX_KEY_SIZE + HV_KVP_EXCHANGE_MAX_VALUE_SIZE));

    kvp_slices
}