peachelf 0.1.1

A simple ELF library for parsing/generating
Documentation
use crate::types;

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub enum ElfType {
    #[serde(rename = "none")]
    None,
    #[serde(rename = "rel")]
    Rel,
    #[serde(rename = "exec")]
    Exec,
    #[serde(rename = "dyn")]
    Dyn,
    #[serde(rename = "core")]
    Core,
    Unknown(types::Elf64Half),
}

impl From<types::Elf64Half> for ElfType {
    fn from(v: u16) -> Self {
        match v {
            0 => Self::None,
            1 => Self::Rel,
            2 => Self::Exec,
            3 => Self::Dyn,
            4 => Self::Core,
            _ => Self::Unknown(v),
        }
    }
}

impl std::fmt::Display for ElfType {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let s = match self {
            Self::Unknown(v) => {
                return write!(f, "unknown({:x})", v);
            }

            Self::None => "none",
            Self::Rel => "rel",
            Self::Exec => "exec",
            Self::Dyn => "dyn",
            Self::Core => "core",
        };

        write!(f, "{}", s)
    }
}