use crate::card_info::CardInfo;
use crate::card_info::CardInfoRead;
use crate::crypto::AESCtr;
use crate::error::Error;
use crate::ncch::NCCH;
use crate::ncsd::NCSD;
use crate::ncsd::NCSDRead;
use std::io::Read;
use std::io::Seek;
pub struct Metadata {
pub ncsd: NCSD,
pub card_info: CardInfo,
pub exefs_ctr: Option<AESCtr>,
}
impl Metadata {
pub fn try_from<T: Read + Seek>(io: &mut T) -> Result<Self, Error> {
let ncsd = io.read_ncsd()?;
let card_info = io.read_card_info()?;
let exefs_ctr = ncsd.find_exefs_ncch().map(NCCH::exefs_ctr);
Ok(Self {
ncsd,
card_info,
exefs_ctr,
})
}
}