nnrp-core 1.0.0-preview.4.9

Canonical NNRP wire codecs, protocol validation, state machines, and preview3 core types.
Documentation
pub const SESSION_ERROR_NONE: u32 = 0x0000_0000;
pub const SESSION_ERROR_AUTH_FAILED: u32 = 0x0001_0001;
pub const SESSION_ERROR_PROFILE_UNSUPPORTED: u32 = 0x0001_0002;
pub const SESSION_ERROR_SCHEMA_UNSUPPORTED: u32 = 0x0001_0003;
pub const SESSION_ERROR_PRIORITY_REJECTED: u32 = 0x0001_0004;
pub const SESSION_ERROR_LEASE_POLICY_REJECTED: u32 = 0x0001_0005;
pub const SESSION_ERROR_RESUME_REJECTED: u32 = 0x0001_0006;
pub const SESSION_ERROR_LIMIT_REACHED: u32 = 0x0001_0007;

pub const CACHE_ERROR_NONE: u32 = 0x0003_0000;
pub const CACHE_ERROR_MISS: u32 = 0x0003_0001;
pub const CACHE_ERROR_LEASE_EXPIRED: u32 = 0x0003_0002;
pub const CACHE_ERROR_VERSION_MISMATCH: u32 = 0x0003_0003;
pub const CACHE_ERROR_DEPENDENCY_INVALID: u32 = 0x0003_0004;
pub const CACHE_ERROR_SCHEMA_MISMATCH: u32 = 0x0003_0005;

pub const SCHEMA_ERROR_NONE: u32 = 0x0004_0000;
pub const SCHEMA_ERROR_UNKNOWN: u32 = 0x0004_0001;
pub const SCHEMA_ERROR_VERSION_UNKNOWN: u32 = 0x0004_0002;
pub const SCHEMA_ERROR_HASH_CONFLICT: u32 = 0x0004_0003;
pub const SCHEMA_ERROR_INCOMPATIBLE: u32 = 0x0004_0004;
pub const SCHEMA_ERROR_DEPENDENCY_MISSING: u32 = 0x0004_0005;
pub const SCHEMA_ERROR_UPDATE_REJECTED: u32 = 0x0004_0006;

#[cfg(test)]
mod tests {
    use super::{
        CACHE_ERROR_DEPENDENCY_INVALID, CACHE_ERROR_LEASE_EXPIRED, CACHE_ERROR_MISS,
        CACHE_ERROR_SCHEMA_MISMATCH, CACHE_ERROR_VERSION_MISMATCH, SCHEMA_ERROR_DEPENDENCY_MISSING,
        SCHEMA_ERROR_HASH_CONFLICT, SCHEMA_ERROR_INCOMPATIBLE, SCHEMA_ERROR_UNKNOWN,
        SCHEMA_ERROR_UPDATE_REJECTED, SCHEMA_ERROR_VERSION_UNKNOWN, SESSION_ERROR_AUTH_FAILED,
        SESSION_ERROR_LEASE_POLICY_REJECTED, SESSION_ERROR_LIMIT_REACHED, SESSION_ERROR_NONE,
        SESSION_ERROR_PRIORITY_REJECTED, SESSION_ERROR_PROFILE_UNSUPPORTED,
        SESSION_ERROR_RESUME_REJECTED, SESSION_ERROR_SCHEMA_UNSUPPORTED,
    };

    #[test]
    fn session_error_codes_match_preview3_golden_values() {
        assert_eq!(SESSION_ERROR_NONE.to_le_bytes(), [0x00, 0x00, 0x00, 0x00]);
        assert_eq!(
            SESSION_ERROR_AUTH_FAILED.to_le_bytes(),
            [0x01, 0x00, 0x01, 0x00]
        );
        assert_eq!(
            SESSION_ERROR_PROFILE_UNSUPPORTED.to_le_bytes(),
            [0x02, 0x00, 0x01, 0x00]
        );
        assert_eq!(
            SESSION_ERROR_SCHEMA_UNSUPPORTED.to_le_bytes(),
            [0x03, 0x00, 0x01, 0x00]
        );
        assert_eq!(
            SESSION_ERROR_PRIORITY_REJECTED.to_le_bytes(),
            [0x04, 0x00, 0x01, 0x00]
        );
        assert_eq!(
            SESSION_ERROR_LEASE_POLICY_REJECTED.to_le_bytes(),
            [0x05, 0x00, 0x01, 0x00]
        );
        assert_eq!(
            SESSION_ERROR_RESUME_REJECTED.to_le_bytes(),
            [0x06, 0x00, 0x01, 0x00]
        );
        assert_eq!(
            SESSION_ERROR_LIMIT_REACHED.to_le_bytes(),
            [0x07, 0x00, 0x01, 0x00]
        );
    }

    #[test]
    fn cache_error_codes_match_preview3_golden_values() {
        assert_eq!(CACHE_ERROR_MISS.to_le_bytes(), [0x01, 0x00, 0x03, 0x00]);
        assert_eq!(
            CACHE_ERROR_LEASE_EXPIRED.to_le_bytes(),
            [0x02, 0x00, 0x03, 0x00]
        );
        assert_eq!(
            CACHE_ERROR_VERSION_MISMATCH.to_le_bytes(),
            [0x03, 0x00, 0x03, 0x00]
        );
        assert_eq!(
            CACHE_ERROR_DEPENDENCY_INVALID.to_le_bytes(),
            [0x04, 0x00, 0x03, 0x00]
        );
        assert_eq!(
            CACHE_ERROR_SCHEMA_MISMATCH.to_le_bytes(),
            [0x05, 0x00, 0x03, 0x00]
        );
    }

    #[test]
    fn schema_error_codes_match_preview3_golden_values() {
        assert_eq!(SCHEMA_ERROR_UNKNOWN.to_le_bytes(), [0x01, 0x00, 0x04, 0x00]);
        assert_eq!(
            SCHEMA_ERROR_VERSION_UNKNOWN.to_le_bytes(),
            [0x02, 0x00, 0x04, 0x00]
        );
        assert_eq!(
            SCHEMA_ERROR_HASH_CONFLICT.to_le_bytes(),
            [0x03, 0x00, 0x04, 0x00]
        );
        assert_eq!(
            SCHEMA_ERROR_INCOMPATIBLE.to_le_bytes(),
            [0x04, 0x00, 0x04, 0x00]
        );
        assert_eq!(
            SCHEMA_ERROR_DEPENDENCY_MISSING.to_le_bytes(),
            [0x05, 0x00, 0x04, 0x00]
        );
        assert_eq!(
            SCHEMA_ERROR_UPDATE_REJECTED.to_le_bytes(),
            [0x06, 0x00, 0x04, 0x00]
        );
    }
}