fn message_source_conversion_fe2o3_amqp()

in sdk/core/azure_core_amqp/src/fe2o3/messaging/message_source.rs [124:219]


fn message_source_conversion_fe2o3_amqp() {
    let fe2o3_source = fe2o3_amqp_types::messaging::Source::builder()
        .address("test")
        .durable(fe2o3_amqp_types::messaging::TerminusDurability::UnsettledState)
        .expiry_policy(fe2o3_amqp_types::messaging::TerminusExpiryPolicy::SessionEnd)
        .timeout(95)
        .dynamic(false)
        .dynamic_node_properties(fe2o3_amqp_types::messaging::LifetimePolicy::DeleteOnClose(
            fe2o3_amqp_types::messaging::DeleteOnClose {},
        ))
        .add_lifetime_policy(fe2o3_amqp_types::messaging::DeleteOnClose {})
        .distribution_mode(fe2o3_amqp_types::messaging::DistributionMode::Move {})
        .add_to_filter(
            fe2o3_amqp_types::primitives::Symbol::from("filter_key"),
            Some(serde_amqp::described::Described {
                descriptor: serde_amqp::descriptor::Descriptor::Name(
                    fe2o3_amqp_types::primitives::Symbol::from("filter_descriptor"),
                ),
                value: fe2o3_amqp_types::primitives::Value::from("filter_value"),
            }),
        )
        .outcomes(vec![fe2o3_amqp_types::primitives::Symbol::from("outcome")])
        .default_outcome(fe2o3_amqp_types::messaging::Outcome::Accepted(
            fe2o3_amqp_types::messaging::Accepted {},
        ))
        .capabilities(vec![fe2o3_amqp_types::primitives::Symbol::from(
            "capability",
        )])
        .build();

    let amqp_source = AmqpSource::from(fe2o3_source.clone());
    let round_trip = fe2o3_amqp_types::messaging::Source::from(amqp_source);

    // fe2o3 source does not implement PartialEq
    assert_eq!(fe2o3_source.address, round_trip.address);
    assert_eq!(fe2o3_source.durable, round_trip.durable);
    assert_eq!(fe2o3_source.expiry_policy, round_trip.expiry_policy);
    assert_eq!(fe2o3_source.timeout, round_trip.timeout);
    assert_eq!(fe2o3_source.dynamic, round_trip.dynamic);
    assert_eq!(
        fe2o3_source.dynamic_node_properties,
        round_trip.dynamic_node_properties
    );
    assert_eq!(fe2o3_source.filter, round_trip.filter);
    assert_eq!(fe2o3_source.outcomes, round_trip.outcomes);
    assert_eq!(fe2o3_source.capabilities, round_trip.capabilities);
    assert_eq!(
        fe2o3_source.distribution_mode.is_some(),
        round_trip.distribution_mode.is_some()
    );

    // DistributionMode is an enum, so we need to match on it and it doesn't implement PartialEq
    let original_distribution_mode = fe2o3_source.distribution_mode.unwrap();
    let round_trip_distribution_mode = round_trip.distribution_mode.unwrap();
    match original_distribution_mode {
        fe2o3_amqp_types::messaging::DistributionMode::Move => {
            assert!(matches!(
                round_trip_distribution_mode,
                fe2o3_amqp_types::messaging::DistributionMode::Move
            ));
        }
        fe2o3_amqp_types::messaging::DistributionMode::Copy => {
            assert!(matches!(
                round_trip_distribution_mode,
                fe2o3_amqp_types::messaging::DistributionMode::Copy
            ));
        }
    }

    assert_eq!(
        fe2o3_source.default_outcome.is_some(),
        round_trip.default_outcome.is_some()
    );

    if fe2o3_source.default_outcome.is_some() {
        let original_default_outcome = fe2o3_source.default_outcome.unwrap();
        let round_trip_default_outcome = round_trip.default_outcome.unwrap();

        assert_eq!(
            original_default_outcome.is_accepted(),
            round_trip_default_outcome.is_accepted(),
        );
        assert_eq!(
            original_default_outcome.is_rejected(),
            round_trip_default_outcome.is_rejected(),
        );
        assert_eq!(
            original_default_outcome.is_released(),
            round_trip_default_outcome.is_released(),
        );
        assert_eq!(
            original_default_outcome.is_modified(),
            round_trip_default_outcome.is_modified(),
        );
    }
}