# Référence API - sdk_common Ce guide documente toutes les APIs disponibles dans la bibliothèque commune sdk_common pour les Silent Payments. ## Vue d'Ensemble La bibliothèque sdk_common fournit des types, structures et utilitaires partagés entre les modules SDK de l'écosystème 4NK. ## 1. Types de Base ### Structures Principales #### Process ```rust pub struct Process { pub id: String, pub name: String, pub description: Option, pub device_id: String, pub state: ProcessState, pub states: Vec, pub created_at: Option, pub updated_at: Option, } ``` #### ProcessState ```rust pub enum ProcessState { Active, Inactive, Pending, Completed, Failed, } ``` #### Member ```rust pub struct Member { pub id: String, pub name: String, pub public_key: String, pub process_id: String, pub roles: Vec, pub sp_addresses: Option>, pub created_at: Option, pub updated_at: Option, } ``` #### ValidationRule ```rust pub struct ValidationRule { pub id: String, pub field_name: String, pub rule_type: ValidationRuleType, pub parameters: Option, pub role_id: String, pub quorum: Option, pub created_at: Option, pub updated_at: Option, } ``` #### ValidationRuleType ```rust pub enum ValidationRuleType { Range, Required, Format, Custom, } ``` ## 2. Fonctions Utilitaires ### Compression et Sérialisation #### compress_data ```rust pub fn compress_data(data: &[u8]) -> Result, CompressionError> ``` Compresse des données en utilisant l'algorithme DEFLATE (flate2). **Paramètres :** - `data` : Données à compresser **Retour :** - `Result, CompressionError>` : Données compressées ou erreur **Exemple :** ```rust use sdk_common::compress_data; let data = b"données à compresser"; let compressed = compress_data(data)?; ``` #### decompress_data ```rust pub fn decompress_data(data: &[u8]) -> Result, CompressionError> ``` Décompresse des données au format DEFLATE. **Paramètres :** - `data` : Données compressées **Retour :** - `Result, CompressionError>` : Données décompressées ou erreur **Exemple :** ```rust use sdk_common::decompress_data; let decompressed = decompress_data(&compressed_data)?; ``` ### Validation #### validate_process ```rust pub fn validate_process(process: &Process) -> Result<(), ValidationError> ``` Valide la structure d'un processus. **Paramètres :** - `process` : Processus à valider **Retour :** - `Result<(), ValidationError>` : Succès ou erreur de validation #### validate_member ```rust pub fn validate_member(member: &Member) -> Result<(), ValidationError> ``` Valide la structure d'un membre. **Paramètres :** - `member` : Membre à valider **Retour :** - `Result<(), ValidationError>` : Succès ou erreur de validation ### Sérialisation #### serialize_process ```rust pub fn serialize_process(process: &Process) -> Result ``` Sérialise un processus en JSON. **Paramètres :** - `process` : Processus à sérialiser **Retour :** - `Result` : JSON sérialisé ou erreur #### deserialize_process ```rust pub fn deserialize_process(json: &str) -> Result ``` Désérialise un processus depuis JSON. **Paramètres :** - `json` : JSON à désérialiser **Retour :** - `Result` : Processus désérialisé ou erreur ## 3. Traits et Interfaces ### ProcessOperations ```rust pub trait ProcessOperations { fn create_process(&self, name: &str, device_id: &str) -> Result; fn update_process(&self, process: &Process) -> Result; fn get_process(&self, id: &str) -> Result, SdkError>; fn list_processes(&self) -> Result, SdkError>; } ``` ### MemberOperations ```rust pub trait MemberOperations { fn add_member(&self, member: &Member) -> Result; fn update_member(&self, member: &Member) -> Result; fn get_member(&self, id: &str) -> Result, SdkError>; fn list_members(&self, process_id: &str) -> Result, SdkError>; } ``` ## 4. Gestion des Erreurs ### Types d'Erreurs #### SdkError ```rust pub enum SdkError { Validation(ValidationError), Serialization(SerializationError), Compression(CompressionError), NotFound(String), InvalidInput(String), Internal(String), } ``` #### ValidationError ```rust pub enum ValidationError { InvalidProcess(String), InvalidMember(String), InvalidRule(String), MissingField(String), InvalidValue(String), } ``` #### SerializationError ```rust pub enum SerializationError { InvalidJson(String), MissingField(String), InvalidType(String), } ``` #### CompressionError ```rust pub enum CompressionError { CompressionFailed(String), DecompressionFailed(String), InvalidData(String), } ``` ## 5. Exemples d'Utilisation ### Création d'un Processus ```rust use sdk_common::{Process, ProcessState, validate_process}; let process = Process { id: "process_123".to_string(), name: "Mon Processus".to_string(), description: Some("Description du processus".to_string()), device_id: "device_456".to_string(), state: ProcessState::Active, states: vec![ProcessState::Active], created_at: None, updated_at: None, }; // Valider le processus validate_process(&process)?; ``` ### Compression de Données ```rust use sdk_common::{compress_data, decompress_data}; // Compresser des données let original_data = b"données importantes à compresser"; let compressed = compress_data(original_data)?; // Décompresser les données let decompressed = decompress_data(&compressed)?; assert_eq!(original_data, decompressed.as_slice()); ``` ### Sérialisation JSON ```rust use sdk_common::{serialize_process, deserialize_process}; let process = Process { /* ... */ }; // Sérialiser en JSON let json = serialize_process(&process)?; // Désérialiser depuis JSON let deserialized_process = deserialize_process(&json)?; ``` ## 6. Configuration ### Features Disponibles ```toml [dependencies] sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", features = ["flate2"] } ``` ### Variables d'Environnement ```bash # Niveau de log RUST_LOG=debug # Configuration de compression COMPRESSION_LEVEL=6 ``` ## 7. Tests ### Tests Unitaires ```bash # Tous les tests cargo test # Tests spécifiques cargo test compression cargo test validation cargo test serialization ``` ### Tests d'Intégration ```bash # Tests d'intégration cargo test --test integration_tests ``` ## 8. Performance ### Métriques de Compression - **Ratio de compression** : ~70% pour les données textuelles - **Vitesse de compression** : ~100MB/s - **Vitesse de décompression** : ~200MB/s ### Optimisations - Utilisation de `flate2` avec `miniz_oxide` (pure Rust) - Sérialisation JSON optimisée - Validation en temps constant ## 9. Sécurité ### Bonnes Pratiques - Validation systématique des entrées - Gestion sécurisée des erreurs - Pas d'exposition d'informations sensibles dans les logs - Utilisation de types sécurisés ### Audit de Sécurité - Code audité pour les vulnérabilités - Tests de sécurité automatisés - Mise à jour régulière des dépendances --- **📚 API Reference complète pour sdk_common - Bibliothèque commune pour les Silent Payments** 🚀