fn from()

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)
    }