Skip to main content

CardFormat

Trait CardFormat 

Source
pub trait CardFormat: Sized {
    const MAGIC: [u8; 4];
    const VERSION_MAJOR: u8;
    const VERSION_MINOR: u8;

    // Required method
    fn format_name() -> &'static str;

    // Provided methods
    fn validate_magic(magic: &[u8; 4]) -> Result<()> { ... }
    fn validate_version(major: u8, minor: u8) -> Result<()> { ... }
    fn validate_payload(_payload: &[u8]) -> Result<()> { ... }
}
Expand description

Trait for defining card formats

Implementors define their magic bytes, version requirements, and validation logic. The datacard library handles generic I/O, checksums, and structure.

§Example

use datacard_rs::{CardFormat, CardError};

pub struct TernsigFormat;

impl CardFormat for TernsigFormat {
    const MAGIC: [u8; 4] = *b"TERN";
    const VERSION_MAJOR: u8 = 1;
    const VERSION_MINOR: u8 = 0;

    fn validate_payload(payload: &[u8]) -> Result<(), CardError> {
        // Ternsig-specific validation
        Ok(())
    }
}

Required Associated Constants§

Source

const MAGIC: [u8; 4]

4-byte magic identifier (e.g., b“TERN“, b“CARD“)

Source

const VERSION_MAJOR: u8

Major version number

Source

const VERSION_MINOR: u8

Minimum supported minor version

Required Methods§

Source

fn format_name() -> &'static str

Format name for error messages

Provided Methods§

Source

fn validate_magic(magic: &[u8; 4]) -> Result<()>

Validate magic bytes match this format

Source

fn validate_version(major: u8, minor: u8) -> Result<()>

Validate version is compatible

Source

fn validate_payload(_payload: &[u8]) -> Result<()>

Validate payload after reading (optional, default no-op)

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§