canonize

Function canonize 

Source
pub fn canonize<T: Serialize>(value: &T) -> Result<Vec<u8>, CanonicalError>
Expand description

Canoniza qualquer Serialize em bytes determinísticos JSON-compatíveis.

Converte um valor serializável em bytes canônicos seguindo as regras do Paper II:

  • Objetos: chaves ordenadas lexicograficamente
  • Strings: normalização Unicode NFC (quando feature = "unicode")
  • Números: apenas inteiros em forma mínima (floats são rejeitados)
  • Literais: true/false/null em minúsculas (padrão JSON)
  • Sem whitespace estrutural extra

O resultado garante que valores semanticamente equivalentes produzem exatamente os mesmos bytes, permitindo hashing determinístico e assinaturas verificáveis.

§Erros

  • CanonicalError::FloatNotAllowed se o valor contiver números de ponto flutuante
  • CanonicalError::Serde se a serialização falhar

§Exemplo

use json_atomic::canonize;
use serde::Serialize;

#[derive(Serialize)]
struct Note {
    title: String,
    done: bool,
}

let note = Note {
    title: "Hello".into(),
    done: false,
};

let canonical = canonize(&note)?;
// Mesmo valor sempre produz os mesmos bytes
let canonical2 = canonize(&note)?;
assert_eq!(canonical, canonical2);