basic_usage/
basic_usage.rs1use v_storage::*;
11
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 println!("=== Basic v-storage Usage Example ===\n");
14
15 let storage = VStorage::builder()
17 .memory()
18 .build()?;
19 let mut storage = VStorage::new(storage);
20
21 println!("ā
Storage created successfully");
22
23 println!("\nš Storing data:");
27
28 let _ = storage.put_value(StorageId::Individuals, "user:1", r#"{
29 "@": "user:1",
30 "rdf:type": [{"type": "Uri", "data": "foaf:Person"}],
31 "rdfs:label": [{"type": "String", "data": "Ivan Petrov"}],
32 "foaf:name": [{"type": "String", "data": "Ivan"}],
33 "foaf:familyName": [{"type": "String", "data": "Petrov"}],
34 "foaf:age": [{"type": "Integer", "data": 30}],
35 "foaf:mbox": [{"type": "String", "data": "ivan.petrov@example.com"}],
36 "veda:created": [{"type": "Datetime", "data": "2024-01-15T10:30:00Z"}]
37 }"#);
38 let _ = storage.put_value(StorageId::Tickets, "ticket:123", r#"{
39 "@": "ticket:123",
40 "rdf:type": [{"type": "Uri", "data": "veda:Ticket"}],
41 "rdfs:label": [{"type": "String", "data": "Support Request"}],
42 "dcterms:title": [{"type": "String", "data": "Email server issue"}],
43 "veda:status": [{"type": "String", "data": "pending"}],
44 "veda:priority": [{"type": "String", "data": "medium"}],
45 "dcterms:created": [{"type": "Datetime", "data": "2024-01-15T09:15:00Z"}]
46 }"#);
47 let _ = storage.put_value(StorageId::Az, "permission:read", r#"{
48 "@": "permission:read",
49 "rdf:type": [{"type": "Uri", "data": "veda:Permission"}],
50 "rdfs:label": [{"type": "String", "data": "Read Access"}],
51 "veda:permissionSubject": [{"type": "Uri", "data": "user:1"}],
52 "veda:permissionObject": [{"type": "Uri", "data": "resource:documents"}],
53 "veda:canRead": [{"type": "Boolean", "data": true}],
54 "dcterms:created": [{"type": "Datetime", "data": "2024-01-15T08:00:00Z"}]
55 }"#);
56
57 println!(" ⢠Stored user: user:1");
58 println!(" ⢠Stored ticket: ticket:123");
59 println!(" ⢠Stored permission: permission:read");
60
61 println!("\nš Reading data:");
63
64 if let StorageResult::Ok(user_data) = storage.get_value(StorageId::Individuals, "user:1") {
65 println!(" ⢠User Individual ({}): Ivan Petrov", user_data.len());
66 }
67
68 if let StorageResult::Ok(ticket_data) = storage.get_value(StorageId::Tickets, "ticket:123") {
69 println!(" ⢠Ticket Individual ({}): Support Request", ticket_data.len());
70 }
71
72 if let StorageResult::Ok(permission_data) = storage.get_value(StorageId::Az, "permission:read") {
73 println!(" ⢠Permission Individual ({}): Read Access", permission_data.len());
74 }
75
76 println!("\nš¢ Working with binary data:");
78
79 let binary_data = vec![0xFF, 0xFE, 0xFD, 0x00, 0x01, 0x02];
80 let _ = storage.put_raw_value(StorageId::Individuals, "binary:data", binary_data.clone());
81
82 if let StorageResult::Ok(retrieved_binary) = storage.get_raw_value(StorageId::Individuals, "binary:data") {
83 println!(" ⢠Stored {} bytes of binary data", retrieved_binary.len());
84 println!(" ⢠Data matches: {}", retrieved_binary == binary_data);
85 }
86
87 println!("\nš Statistics:");
89
90 if let StorageResult::Ok(individuals_count) = storage.count(StorageId::Individuals) {
91 println!(" ⢠Individuals count: {}", individuals_count);
92 }
93
94 if let StorageResult::Ok(tickets_count) = storage.count(StorageId::Tickets) {
95 println!(" ⢠Tickets count: {}", tickets_count);
96 }
97
98 if let StorageResult::Ok(az_count) = storage.count(StorageId::Az) {
99 println!(" ⢠Permissions count: {}", az_count);
100 }
101
102 println!("\nšļø Removing data:");
104
105 let _ = storage.remove_value(StorageId::Tickets, "ticket:123");
106 println!(" ⢠Ticket ticket:123 removed");
107
108 match storage.get_value(StorageId::Tickets, "ticket:123") {
110 StorageResult::NotFound => println!(" ⢠Confirmed: ticket not found"),
111 _ => println!(" ⢠Error: ticket still exists"),
112 }
113
114 println!("\nā ļø Error handling:");
116
117 match storage.get_value(StorageId::Individuals, "nonexistent") {
118 StorageResult::NotFound => println!(" ⢠Correctly handled missing key case"),
119 StorageResult::Ok(_) => println!(" ⢠Unexpected: found data"),
120 StorageResult::Error(e) => println!(" ⢠Error: {}", e),
121 _ => println!(" ⢠Other result"),
122 }
123
124 println!("\nš Backward compatibility:");
126
127 #[allow(deprecated)]
128 {
129 let success = storage.put_kv(StorageId::Individuals, "old:key", "old:value");
131 println!(" ⢠Old put_kv: {}", if success { "success" } else { "error" });
132
133 if let Some(value) = storage.get_v(StorageId::Individuals, "old:key") {
134 println!(" ⢠Old get_v: {}", value);
135 }
136 }
137
138 println!("\n⨠Example completed successfully!");
139 Ok(())
140}