Skip to content

Conversation

JamieTsai1024
Copy link
Contributor

@JamieTsai1024 JamieTsai1024 commented Jul 21, 2025

  • Add rustdoc comments to object_id module and contained structs AsHexString and FromHexString
  • Move tests to match ordering of modules in src/serde_helpers.rs
  • Shorten tests for *_optional_some, *_vector, and deserializing
  • Move location of #[cfg(feature = "serde_with-3")] in tests to reduce indentation

Condense oid_optional_some:

    // Before 
    assert_eq!(
        doc.get("oid_optional_some"),
        Some(&Bson::ObjectId(oid)),
        "Expected serialized oid_optional_some to match original."
    );

    // After 
    match doc.get("oid_optional_some") {
        Some(Bson::String(value)) => {
            assert_eq!(
                *value,
                oid.to_hex(),
                "Expected serialized oid_optional_some to match original ObjectId."
            )
        }
        _ => {
            panic!("Expected serialized oid_optional_some to be a BSON String.")
        }
    }

Condense *_vector:

    // Before 
    let expected_oid_vector: Vec<Bson> = b
        .oid_vector
        .into_iter()
        .map(|oid| Bson::String(oid.to_hex()))
        .collect();

    // After
    let expected_oid_vector: Vec<Bson> = vec![Bson::ObjectId(oid)];

Condense deserialization:

    // Before 
    // Deserialize the BSON back to the struct
    let b_deserialized: B = deserialize_from_document(doc).unwrap();

    // Validate deserialized data
    assert_eq!(
        b_deserialized.oid, oid,
        "Expected deserialized oid to match the original."
    );

    assert_eq!(
        b_deserialized.oid_optional_none, None,
        "Expected deserialized oid_optional_none to be None."
    );

    assert_eq!(
        b_deserialized.oid_optional_some,
        Some(oid),
        "Expected deserialized oid_optional_some to match the original."
    );

    assert_eq!(
        b_deserialized.oid_vector,
        vec![oid],
        "Expected deserialized oid_vector to match the original.."
    );

    // After 
    // Validate deserialized data
    let a_deserialized: A = deserialize_from_document(doc).unwrap();
    assert_eq!(
        a_deserialized, a,
        "Deserialized struct does not match original."
    );

Previously:

  • Rewrote serde converters as structs with SerializeAs and DeserializeAs traits to support Optional and Vector conversions in PR #559
  • Adapted serde_conv macro to support Rustdocs, refactored all ObjectId converters in PR #566
  • Refactored all DateTime converters in PR #570
  • Converted all unsigned (u32 and u64) helpers in PR #575

@JamieTsai1024 JamieTsai1024 marked this pull request as ready for review July 21, 2025 17:06
@JamieTsai1024 JamieTsai1024 requested a review from a team as a code owner July 21, 2025 17:06
@JamieTsai1024 JamieTsai1024 merged commit aa25c26 into mongodb:main Jul 21, 2025
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants