Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Formatting & Display

Cnpj can render itself two ways, and neither one allocates on the heap.

Compact form

Cnpj::as_str() returns the 14-character compact form with no punctuation, e.g. "00000000000191". Internally this is a zero-cost borrow of the identifier’s own byte buffer — it never allocates and never panics, because the bytes are guaranteed to be valid ASCII by construction.

use ftracker_identifiers::Cnpj;

let cnpj = Cnpj::parse("00.000.000/0001-91").unwrap();
assert_eq!(cnpj.as_str(), "00000000000191");

If you need raw bytes instead of a &str, Cnpj::as_bytes() returns &[u8; 14] directly.

Punctuated form

Cnpj::formatted() returns a FormattedCnpj — a small, stack-allocated, Copy value that renders the conventional AA.AAA.AAA/AAAA-DD layout. It implements Display, Deref<Target = str>, and AsRef<str>, so you can pass it almost anywhere a &str is expected without an explicit conversion:

use ftracker_identifiers::Cnpj;

let cnpj = Cnpj::parse("00000000000191").unwrap();
let formatted = cnpj.formatted();

assert_eq!(formatted.as_str(), "00.000.000/0001-91");
assert_eq!(&*formatted, "00.000.000/0001-91"); // via Deref
println!("{formatted}");                        // via Display

Display and Debug on Cnpj itself

Cnpj implements Display by delegating to formatted(), so cnpj.to_string() always produces the punctuated form:

use ftracker_identifiers::Cnpj;

let cnpj = Cnpj::parse("00000000000191").unwrap();
assert_eq!(cnpj.to_string(), "00.000.000/0001-91");

Debug wraps the same punctuated form in a readable tuple-struct style, which is what you’ll see in assert_eq! failure messages, logs, and {:?} output:

Cnpj("00.000.000/0001-91")

This makes a mismatched or unexpected Cnpj easy to spot at a glance in test output or logs, without needing to manually reformat raw bytes.