1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//! # PIX BR Code Parser
//!
//! Uma biblioteca Rust para análise e validação de códigos QR PIX (BR Code) brasileiros
//! seguindo o padrão EMV QRCPS (QR Code Payment System).
//!
//! ## Características
//!
//! - Análise de códigos QR PIX estáticos e dinâmicos
//! - Validação de conformidade com EMV QRCPS
//! - Validação de checksum CRC16
//! - API ergonômica com structs tipadas
//! - Suporte opcional ao serde para serialização
//! - Análise zero-allocation para aplicações críticas de performance
//! - Geração de códigos QR PIX
//! - Classificação automática de tipos de chave PIX
//!
//! ## Início Rápido
//!
//! ### Analisando um Código PIX
//!
//! ```rust
//! use pix_brcode_parser::{parse_brcode, BRCodeError};
//!
//! let qr_string = "00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-426614174000520400005303986540510.005802BR5913FULANO DE TAL6008BRASILIA62070503***630436D9";
//!
//! match parse_brcode(qr_string) {
//! Ok(brcode) => {
//! println!("✅ Código PIX válido!");
//! println!("Chave PIX: {}", brcode.merchant_account_info.pix_key);
//! println!("Tipo da Chave: {:?}", brcode.pix_key_type());
//! println!("Comerciante: {}", brcode.merchant_name);
//! println!("Cidade: {}", brcode.merchant_city);
//!
//! if let Some(amount) = &brcode.transaction_amount {
//! println!("Valor: R$ {}", amount);
//! } else {
//! println!("Valor: A ser definido pelo usuário");
//! }
//! }
//! Err(e) => eprintln!("❌ Erro ao analisar código PIX: {}", e),
//! }
//! ```
//!
//! ### Gerando um Código PIX
//!
//! ```rust
//! use pix_brcode_parser::{BRCode, MerchantAccountInfo, generate_brcode};
//!
//! let brcode = BRCode {
//! payload_format_indicator: "01".to_string(),
//! point_of_initiation_method: Some("11".to_string()), // Estático
//! merchant_account_info: MerchantAccountInfo {
//! gui: "br.gov.bcb.pix".to_string(),
//! pix_key: "user@example.com".to_string(),
//! description: Some("Pagamento por serviços".to_string()),
//! url: None,
//! },
//! merchant_category_code: "0000".to_string(),
//! transaction_currency: "986".to_string(), // BRL
//! transaction_amount: Some("25.50".to_string()),
//! country_code: "BR".to_string(),
//! merchant_name: "ACME CORP".to_string(),
//! merchant_city: "SAO PAULO".to_string(),
//! additional_data: None,
//! crc16: String::new(), // Será calculado automaticamente
//! };
//!
//! match generate_brcode(&brcode) {
//! Ok(qr_string) => {
//! println!("Código QR gerado: {}", qr_string);
//! }
//! Err(e) => {
//! eprintln!("Erro ao gerar código: {}", e);
//! }
//! }
//! ```
//!
//! ### Tipos de Chave PIX
//!
//! ```rust
//! use pix_brcode_parser::{classify_pix_key, PixKeyType};
//!
//! // Diferentes tipos de chave PIX suportados
//! assert_eq!(classify_pix_key("123e4567-e89b-12d3-a456-426614174000"), PixKeyType::Uuid);
//! assert_eq!(classify_pix_key("usuario@exemplo.com"), PixKeyType::Email);
//! assert_eq!(classify_pix_key("+5511999999999"), PixKeyType::Phone);
//! assert_eq!(classify_pix_key("12345678901"), PixKeyType::Cpf);
//! assert_eq!(classify_pix_key("12345678000195"), PixKeyType::Cnpj);
//! ```
//!
//! ## Tratamento de Erros
//!
//! ```rust
//! use pix_brcode_parser::{parse_brcode, BRCodeError};
//!
//! match parse_brcode("codigo_invalido") {
//! Err(BRCodeError::InvalidChecksum) => {
//! println!("Checksum inválido - código pode estar corrompido");
//! }
//! Err(BRCodeError::InvalidGui(gui)) => {
//! println!("GUI inválido: esperado 'br.gov.bcb.pix', encontrado: {}", gui);
//! }
//! Err(BRCodeError::MissingField(field)) => {
//! println!("Campo obrigatório ausente: {}", field);
//! }
//! _ => {}
//! }
//! ```
//!
//! ## Validações
//!
//! Esta biblioteca implementa todas as validações necessárias:
//!
//! - **Checksum CRC16**: Validação completa usando CRC-16/CCITT-FALSE
//! - **GUI PIX**: Deve ser "br.gov.bcb.pix"
//! - **Código da Moeda**: Deve ser "986" (Real Brasileiro)
//! - **Código do País**: Deve ser "BR"
//! - **Limites de Campo**: Nome do comerciante (25 chars), cidade (15 chars)
//! - **Formato da Chave PIX**: Validação de caracteres e formato
pub use BRCodeError;
pub use ;
pub use *;
pub use validate_crc16;
/// Parse a PIX BR Code string into a structured format