individual_operations/
individual_operations.rs

1// examples/individual_operations.rs
2//! Demonstration of working with Individual objects in v-storage
3//! 
4//! This example shows:
5//! - Storing and loading Individual objects
6//! - Working with different Individual data formats (primarily JSON)
7//! - Handling Individual parsing errors
8//! - Different ways of working with Individual
9//! 
10//! Note: Individual can be represented in different formats,
11//! but this example uses JSON format for clarity.
12
13use v_storage::*;
14use v_individual_model::onto::individual::Individual;
15
16fn main() {
17    println!("=== Демонстрация работы с Individual в v-storage ===\n");
18
19    // Создаем хранилище в памяти
20    let mut storage = VStorage::new(Box::new(MemoryStorage::new()));
21    
22    // Создаем Individual
23    let mut individual = Individual::default();
24    
25    println!("1. Загрузка несуществующего Individual:");
26    match storage.get_individual("test:nonexistent", &mut individual) {
27        StorageResult::Ok(_) => {
28            println!("   ✓ Individual найден!");
29            println!("   • ID: {}", individual.get_id());
30        },
31        StorageResult::UnprocessableEntity => {
32            println!("   ✗ Individual найден, но не может быть обработан");
33            println!("   • Возможно, данные повреждены или имеют неверный формат");
34        },
35        StorageResult::NotFound => {
36            println!("   ✗ Individual не найден");
37            println!("   • Ключ 'test:nonexistent' не существует в хранилище");
38        },
39        StorageResult::NotReady => {
40            println!("   ✗ Хранилище не готово");
41        },
42        StorageResult::Error(msg) => {
43            println!("   ✗ Ошибка: {}", msg);
44        }
45    }
46    
47    println!("\n2. Сохранение Individual данных:");
48    
49    // Сохраняем корректные данные Individual
50    let individual_data = r#"{"@":"individual","@id":"test:person","rdfs:label":[{"data":"Тестовый пользователь","lang":"ru","type":"_string"}]}"#;
51    
52    match storage.put_value(StorageId::Individuals, "test:person", individual_data) {
53        StorageResult::Ok(_) => {
54            println!("   ✓ Individual успешно сохранен");
55        },
56        StorageResult::Error(msg) => {
57            println!("   ✗ Ошибка при сохранении: {}", msg);
58        },
59        _ => {
60            println!("   ✗ Неожиданная ошибка при сохранении");
61        }
62    }
63    
64    println!("\n3. Загрузка существующего Individual:");
65    match storage.get_individual("test:person", &mut individual) {
66        StorageResult::Ok(_) => {
67            println!("   ✓ Individual успешно загружен!");
68            println!("   • ID: {}", individual.get_id());
69            println!("   • Сырые данные: {} байт", individual.get_raw_len());
70        },
71        StorageResult::UnprocessableEntity => {
72            println!("   ✗ Individual найден, но не может быть обработан");
73            println!("   • Проверьте формат данных");
74        },
75        StorageResult::NotFound => {
76            println!("   ✗ Individual не найден");
77        },
78        StorageResult::NotReady => {
79            println!("   ✗ Хранилище не готово");
80        },
81        StorageResult::Error(msg) => {
82            println!("   ✗ Ошибка: {}", msg);
83        }
84    }
85    
86    println!("\n4. Тестирование с невалидными данными:");
87    
88    // Сохраняем невалидные данные
89    let invalid_data = "это не JSON и не Individual";
90    match storage.put_value(StorageId::Individuals, "test:invalid", invalid_data) {
91        StorageResult::Ok(_) => {
92            println!("   ✓ Невалидные данные сохранены (для тестирования)");
93        },
94        StorageResult::Error(msg) => {
95            println!("   ✗ Ошибка при сохранении: {}", msg);
96        },
97        _ => {
98            println!("   ✗ Неожиданная ошибка при сохранении");
99        }
100    }
101    
102    // Пытаемся загрузить невалидные данные
103    match storage.get_individual("test:invalid", &mut individual) {
104        StorageResult::Ok(_) => {
105            println!("   ✓ Данные загружены (неожиданно)");
106        },
107        StorageResult::UnprocessableEntity => {
108            println!("   ✓ Корректно обработаны невалидные данные");
109            println!("   • Система правильно определила, что данные не являются Individual");
110        },
111        StorageResult::NotFound => {
112            println!("   ✗ Данные не найдены (неожиданно)");
113        },
114        StorageResult::NotReady => {
115            println!("   ✗ Хранилище не готово");
116        },
117        StorageResult::Error(msg) => {
118            println!("   ✗ Ошибка: {}", msg);
119        }
120    }
121    
122    println!("\n5. Работа с различными типами хранилищ:");
123    
124    // Демонстрация работы с разными типами хранилищ
125    let mut memory_storage = VStorageEnum::memory();
126    
127    println!("   • Память: сохранение данных...");
128    match memory_storage.put_value(StorageId::Individuals, "test:memory", individual_data) {
129        StorageResult::Ok(_) => {
130            println!("     ✓ Данные сохранены в памяти");
131            
132            // Проверяем загрузку
133                         match memory_storage.get_individual(StorageId::Individuals, "test:memory", &mut individual) {
134                StorageResult::Ok(_) => {
135                    println!("     ✓ Данные успешно загружены из памяти");
136                    println!("     • ID: {}", individual.get_id());
137                },
138                result => {
139                    println!("     ✗ Не удалось загрузить данные: {:?}", result);
140                }
141            }
142        },
143        StorageResult::Error(msg) => {
144            println!("     ✗ Ошибка при сохранении: {}", msg);
145        },
146        _ => {
147            println!("     ✗ Неожиданная ошибка при сохранении");
148        }
149    }
150    
151    println!("\n6. Подсчет количества Individual:");
152    match storage.count(StorageId::Individuals) {
153        StorageResult::Ok(count) => {
154            println!("   ✓ В хранилище {} Individual(s)", count);
155        },
156        StorageResult::Error(msg) => {
157            println!("   ✗ Ошибка при подсчете: {}", msg);
158        },
159        _ => {
160            println!("   ✗ Подсчет недоступен");
161        }
162    }
163    
164    println!("\n7. Лучшие практики:");
165    println!("   • Всегда проверяйте StorageResult при загрузке Individual");
166    println!("   • StorageResult::UnprocessableEntity означает, что данные есть, но не валидны");
167    println!("   • StorageResult::NotFound означает, что данных нет");
168    println!("   • StorageResult::NotReady означает, что хранилище не готово к работе");
169    println!("   • Используйте соответствующие методы для разных типов данных");
170    
171    println!("\n=== Демонстрация завершена ===");
172}