in sdk/core/azure_core_amqp/src/messaging.rs [524:574]
fn from(source: AmqpSource) -> Self {
let mut list = vec![AmqpValue::Null; 11];
// Serialize the current value, if it exists. Otherwise serialize a null
list[0] = source.address.map_or(AmqpValue::Null, AmqpValue::String);
list[1] = source
.durable
.map_or(AmqpValue::Null, |v| AmqpValue::UByte(v as u8));
list[2] = source
.expiry_policy
.map_or(AmqpValue::Null, |v| AmqpValue::Symbol(v.into()));
list[3] = source.timeout.map_or(AmqpValue::Null, AmqpValue::UInt);
list[4] = source.dynamic.map_or(AmqpValue::Null, AmqpValue::Boolean);
list[5] = source.dynamic_node_properties.map_or(AmqpValue::Null, |v| {
AmqpValue::Map(
v.into_iter()
.map(|(k, v)| (AmqpValue::Symbol(k), v))
.collect(),
)
});
list[6] = source
.distribution_mode
.map_or(AmqpValue::Null, |v| AmqpValue::Symbol(v.into()));
list[7] = source.filter.map_or(AmqpValue::Null, |v| {
AmqpValue::Map(
v.into_iter()
.map(|(k, v)| (AmqpValue::Symbol(k), v))
.collect(),
)
});
list[8] = source
.default_outcome
.map_or(AmqpValue::Null, |v| AmqpValue::Symbol(v.into()));
list[9] = source.outcomes.map_or(AmqpValue::Null, |v| {
AmqpValue::Array(v.into_iter().map(AmqpValue::Symbol).collect())
});
list[10] = source.capabilities.map_or(AmqpValue::Null, |v| {
AmqpValue::Array(v.into_iter().map(AmqpValue::Symbol).collect())
});
let mut trailing_nulls = 0;
for val in list.iter().rev() {
if *val != AmqpValue::Null {
break;
}
trailing_nulls += 1;
}
list.truncate(list.len() - trailing_nulls);
AmqpList::from(list)
}