pxar/examples/mk-format-hashes.rs
Christian Ebner 0983094c87 format/encoder/decoder: new pxar entry type Version
Introduces a new pxar format entry type `Version` and the associated
encoder and decoder methods. The format version entry is only allowed
once, as the first entry of the pxar archive, marked with a
`PXAR_FORMAT_VERSION` header followed by the encoded version number.
If not present, the default format version 1 is assumed as encoding
format for the archive.

The entry allows to early detect incompatibility with an encoded
archive and bail or switch mode based on the encountered version.

The format version entry is not backwards compatible to pxar format
version 1.

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2024-06-05 09:24:22 +02:00

89 lines
2.6 KiB
Rust

use pxar::format::hash_filename;
const CONSTANTS: &[(&str, &str, &str)] = &[
(
"Pxar format version entry, fallback to version 1 if not present",
"PXAR_FORMAT_VERSION",
"__PROXMOX_FORMAT_VERSION__",
),
(
"Beginning of an entry (current version).",
"PXAR_ENTRY",
"__PROXMOX_FORMAT_ENTRY_V2__",
),
(
"Previous version of the entry struct",
"PXAR_ENTRY_V1",
"__PROXMOX_FORMAT_ENTRY__",
),
("", "PXAR_FILENAME", "__PROXMOX_FORMAT_FILENAME__"),
("", "PXAR_SYMLINK", "__PROXMOX_FORMAT_SYMLINK__"),
("", "PXAR_DEVICE", "__PROXMOX_FORMAT_DEVICE__"),
("", "PXAR_XATTR", "__PROXMOX_FORMAT_XATTR__"),
("", "PXAR_ACL_USER", "__PROXMOX_FORMAT_ACL_USER__"),
("", "PXAR_ACL_GROUP", "__PROXMOX_FORMAT_ACL_GROUP__"),
("", "PXAR_ACL_GROUP_OBJ", "__PROXMOX_FORMAT_ACL_GROUP_OBJ__"),
("", "PXAR_ACL_DEFAULT", "__PROXMOX_FORMAT_ACL_DEFAULT__"),
(
"",
"PXAR_ACL_DEFAULT_USER",
"__PROXMOX_FORMAT_ACL_DEFAULT_USER__",
),
(
"",
"PXAR_ACL_DEFAULT_GROUP",
"__PROXMOX_FORMAT_ACL_DEFAULT_GROUP__",
),
("", "PXAR_FCAPS", "__PROXMOX_FORMAT_FCAPS__"),
("", "PXAR_QUOTA_PROJID", "__PROXMOX_FORMAT_QUOTA_PROJID__"),
(
"Marks item as hardlink",
"PXAR_HARDLINK",
"__PROXMOX_FORMAT_HARDLINK__",
),
(
"Marks the beginning of the payload (actual content) of regular files",
"PXAR_PAYLOAD",
"__PROXMOX_FORMAT_PXAR_PAYLOAD__",
),
(
"Marks the beginning of a payload reference for regular files",
"PXAR_PAYLOAD_REF",
"__PROXMOX_FORMAT_PXAR_PAYLOAD_REF__",
),
(
"Marks item as entry of goodbye table",
"PXAR_GOODBYE",
"__PROXMOX_FORMAT_GOODBYE__",
),
(
"The end marker used in the GOODBYE object",
"PXAR_GOODBYE_TAIL_MARKER",
"__PROXMOX_FORMAT_PXAR_GOODBYE_TAIL_MARKER__",
),
(
"The start marker used in the separate payload stream",
"PXAR_PAYLOAD_START_MARKER",
"__PROXMOX_FORMAT_PXAR_PAYLOAD_START_MARKER__",
),
(
"The end marker used in the separate payload stream",
"PXAR_PAYLOAD_TAIL_MARKER",
"__PROXMOX_FORMAT_PXAR_PAYLOAD_TAIL_MARKER__",
),
];
fn main() {
println!("// Generated by `cargo run --example mk-format-hashes`");
for constant in CONSTANTS {
if !constant.0.is_empty() {
println!("/// {}", constant.0);
}
println!(
"pub const {}: u64 = 0x{:016x};",
constant.1,
hash_filename(constant.2.as_bytes()),
)
}
}