miden-objects 0.17.0-rc.4

Canonical Protobuf representations for Miden protocol objects
Documentation
use crate::test_utils::error_source;
use crate::{DecodeMessage, Verify, proto};

mod common;

mod errors;

mod roundtrip;

#[test]
fn foreign_account_slot_name_defers_name_and_id_validation() {
    let name = miden_protocol::account::StorageSlotName::mock(1);
    let wire = proto::transaction::ForeignAccountSlotName {
        slot_id: Some(name.id().into()),
        slot_name: name.as_str().into(),
    };
    assert_eq!(wire.clone().decode_fields().unwrap().verify().unwrap(), (name.id(), name));
    let invalid =
        proto::transaction::ForeignAccountSlotName { slot_name: "".into(), ..wire.clone() };
    assert!(invalid.decode_fields().unwrap().verify().is_err());
    let mismatched = proto::transaction::ForeignAccountSlotName {
        slot_name: miden_protocol::account::StorageSlotName::mock(2).as_str().into(),
        ..wire
    };
    assert!(matches!(
        error_source::<crate::decoded::transaction::ForeignAccountSlotNameError>(
            &mismatched.decode_fields().unwrap().verify().unwrap_err()
        ),
        Some(crate::decoded::transaction::ForeignAccountSlotNameError::IdMismatch { .. })
    ));
}