Lines
66.67 %
Functions
35.42 %
Branches
100 %
// Auto-generated from doc/nomisync-script-format.org
// Do not edit manually - regenerate from the org document.
#[repr(C)]
#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
pub struct GlobalHeader {
pub magic: u32,
pub version: u16,
pub context_type: u8,
pub primary_entity_type: u8,
pub input_entity_count: u32,
pub entities_offset: u32,
pub strings_pool_offset: u32,
pub strings_pool_size: u32,
pub output_offset: u32,
pub output_size: u32,
pub primary_entity_idx: u32,
pub reserved: [u8; 28],
}
pub const GLOBAL_HEADER_SIZE: usize = 64;
pub struct EntityHeader {
pub entity_type: u8,
pub operation: u8,
pub flags: u8,
pub reserved: [u8; 1],
pub id: [u8; 16],
pub parent_idx: i32,
pub data_offset: u32,
pub data_size: u32,
pub const ENTITY_HEADER_SIZE: usize = 32;
pub struct TransactionData {
pub post_date: i64,
pub enter_date: i64,
pub split_count: u32,
pub tag_count: u32,
pub is_multi_currency: u8,
pub reserved: [u8; 23],
pub const TRANSACTION_DATA_SIZE: usize = 48;
pub struct SplitData {
pub account_id: [u8; 16],
pub commodity_id: [u8; 16],
pub value_num: i64,
pub value_denom: i64,
pub reconcile_state: u8,
pub reserved: [u8; 7],
pub reconcile_date: i64,
pub const SPLIT_DATA_SIZE: usize = 64;
pub struct TagData {
pub name_offset: u32,
pub value_offset: u32,
pub name_len: u16,
pub value_len: u16,
pub reserved: [u8; 4],
pub const TAG_DATA_SIZE: usize = 16;
pub struct AccountData {
pub parent_account_id: [u8; 16],
pub path_offset: u32,
pub path_len: u16,
pub reserved: [u8; 16],
pub const ACCOUNT_DATA_SIZE: usize = 48;
pub struct CommodityData {
pub symbol_offset: u32,
pub fraction: u32,
pub symbol_len: u16,
pub reserved: [u8; 12],
pub const COMMODITY_DATA_SIZE: usize = 32;
pub struct OutputHeader {
pub output_entity_count: u32,
pub output_start_idx: u32,
pub strings_offset: u32,
pub next_write_pos: u32,
pub const OUTPUT_HEADER_SIZE: usize = 24;
impl GlobalHeader {
pub fn to_bytes(&self) -> [u8; GLOBAL_HEADER_SIZE] {
let mut buf = [0u8; GLOBAL_HEADER_SIZE];
buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
buf
pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
let v = Self::read_from_prefix(bytes).ok().map(|(v, _)| v)?;
(v.magic == MAGIC_NOMI).then_some(v)
impl EntityHeader {
pub fn to_bytes(&self) -> [u8; ENTITY_HEADER_SIZE] {
let mut buf = [0u8; ENTITY_HEADER_SIZE];
Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
impl TransactionData {
pub fn to_bytes(&self) -> [u8; TRANSACTION_DATA_SIZE] {
let mut buf = [0u8; TRANSACTION_DATA_SIZE];
impl SplitData {
pub fn to_bytes(&self) -> [u8; SPLIT_DATA_SIZE] {
let mut buf = [0u8; SPLIT_DATA_SIZE];
impl TagData {
pub fn to_bytes(&self) -> [u8; TAG_DATA_SIZE] {
let mut buf = [0u8; TAG_DATA_SIZE];
impl AccountData {
pub fn to_bytes(&self) -> [u8; ACCOUNT_DATA_SIZE] {
let mut buf = [0u8; ACCOUNT_DATA_SIZE];
impl CommodityData {
pub fn to_bytes(&self) -> [u8; COMMODITY_DATA_SIZE] {
let mut buf = [0u8; COMMODITY_DATA_SIZE];
impl OutputHeader {
pub fn to_bytes(&self) -> [u8; OUTPUT_HEADER_SIZE] {
let mut buf = [0u8; OUTPUT_HEADER_SIZE];
(v.magic == MAGIC_OUTP).then_some(v)