Skip to content

Commit 0b7ab5a

Browse files
authored
Merge pull request #3 from sristy17/master
Revert
2 parents ca86d44 + 41c9437 commit 0b7ab5a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1381
-61
lines changed

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Pooranjoy Bhattacharya
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

Makefile

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ getDatabase: $(SRCS) $(EXAMPLES_DIR)/database/getDatabase.cpp
5454
$(CXX) $(CXXFLAGS) -o tests/database/getDatabase $(SRCS) $(EXAMPLES_DIR)/database/getDatabase.cpp $(LDFLAGS)
5555
listDatabase: $(SRCS) $(EXAMPLES_DIR)/database/listDatabase.cpp
5656
$(CXX) $(CXXFLAGS) -o tests/database/listDatabase $(SRCS) $(EXAMPLES_DIR)/database/listDatabase.cpp $(LDFLAGS)
57-
57+
getDatabaseUsage: $(SRCS) $(EXAMPLES_DIR)/database/getDatabaseUsage.cpp
58+
$(CXX) $(CXXFLAGS) -o tests/database/getDatabaseUsage $(SRCS) $(EXAMPLES_DIR)/database/getDatabaseUsage.cpp $(LDFLAGS)
59+
getCollectionUsage: $(SRCS) $(EXAMPLES_DIR)/database/getCollectionUsage.cpp
60+
$(CXX) $(CXXFLAGS) -o tests/database/getCollectionUsage $(SRCS) $(EXAMPLES_DIR)/database/getCollectionUsage.cpp $(LDFLAGS)
5861

5962
# Database - Collection
6063
listCollection: $(SRCS) $(EXAMPLES_DIR)/database/collection/listCollection.cpp
@@ -68,9 +71,15 @@ updateCollection: $(SRCS) $(EXAMPLES_DIR)/database/collection/updateCollection.c
6871
deleteCollection: $(SRCS) $(EXAMPLES_DIR)/database/collection/deleteCollection.cpp
6972
$(CXX) $(CXXFLAGS) -o tests/collection/deleteCollection $(SRCS) $(EXAMPLES_DIR)/database/collection/deleteCollection.cpp $(LDFLAGS)
7073

71-
# Database - Document
72-
createDocument: $(SRCS) $(EXAMPLES_DIR)/database/createDocument.cpp
73-
$(CXX) $(CXXFLAGS) -o tests/createDocument $(SRCS) $(EXAMPLES_DIR)/database/createDocument.cpp $(LDFLAGS)
74+
# Database-Collection-Document
75+
createDocument: $(SRCS) $(EXAMPLES_DIR)/database/collection/document/createDocument.cpp
76+
$(CXX) $(CXXFLAGS) -o tests/document/createDocument $(SRCS) $(EXAMPLES_DIR)/database/collection/document/createDocument.cpp $(LDFLAGS)
77+
listDocument: $(SRCS) $(EXAMPLES_DIR)/database/collection/document/listDocument.cpp
78+
$(CXX) $(CXXFLAGS) -o tests/document/listDocument $(SRCS) $(EXAMPLES_DIR)/database/collection/document/listDocument.cpp $(LDFLAGS)
79+
deleteDocument: $(SRCS) $(EXAMPLES_DIR)/database/collection/document/deleteDocument.cpp
80+
$(CXX) $(CXXFLAGS) -o tests/document/deleteDocument $(SRCS) $(EXAMPLES_DIR)/database/collection/document/deleteDocument.cpp $(LDFLAGS)
81+
getDocument: $(SRCS) $(EXAMPLES_DIR)/database/collection/document/getDocument.cpp
82+
$(CXX) $(CXXFLAGS) -o tests/document/getDocument $(SRCS) $(EXAMPLES_DIR)/database/collection/document/getDocument.cpp $(LDFLAGS)
7483

7584
#Collection-Attribute
7685
listAttributes: $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/listAttributes.cpp
@@ -100,7 +109,20 @@ updateFloatAttribute: $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/upda
100109
$(CXX) $(CXXFLAGS) -o tests/attribute/updateFloatAttribute $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateFloatAttribute.cpp $(LDFLAGS)
101110
updateIntegerAttribute: $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateIntegerAttribute.cpp
102111
$(CXX) $(CXXFLAGS) -o tests/attribute/updateIntegerAttribute $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateIntegerAttribute.cpp $(LDFLAGS)
103-
112+
updateIPaddressAttribute: $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateIPaddressAttribute.cpp
113+
$(CXX) $(CXXFLAGS) -o tests/attribute/updateIPaddressAttribute $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateIPaddressAttribute.cpp $(LDFLAGS)
114+
updateStringAttribute: $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateStringAttribute.cpp
115+
$(CXX) $(CXXFLAGS) -o tests/attribute/updateStringAttribute $(SRCS) $(EXAMPLES_DIR)/database/collection/attribute/updateStringAttribute.cpp $(LDFLAGS)
116+
117+
# Collection-Indexes
118+
listIndexes: $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/listIndexes.cpp
119+
$(CXX) $(CXXFLAGS) -o tests/indexes/listIndexes $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/listIndexes.cpp $(LDFLAGS)
120+
createIndex: $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/createIndex.cpp
121+
$(CXX) $(CXXFLAGS) -o tests/indexes/createIndex $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/createIndex.cpp $(LDFLAGS)
122+
deleteIndex: $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/deleteIndex.cpp
123+
$(CXX) $(CXXFLAGS) -o tests/indexes/deleteIndex $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/deleteIndex.cpp $(LDFLAGS)
124+
getIndex: $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/getIndex.cpp
125+
$(CXX) $(CXXFLAGS) -o tests/indexes/getIndex $(SRCS) $(EXAMPLES_DIR)/database/collection/indexes/getIndex.cpp $(LDFLAGS)
104126

105127
# Storage
106128
createBucket: $(SRCS) $(EXAMPLES_DIR)/storage/createBucket.cpp
@@ -135,6 +157,32 @@ getDB: $(SRCS) $(EXAMPLES_DIR)/health/getDB.cpp
135157
$(CXX) $(CXXFLAGS) -o tests/health/getDB $(SRCS) $(EXAMPLES_DIR)/health/getDB.cpp $(LDFLAGS)
136158
getPubSub: $(SRCS) $(EXAMPLES_DIR)/health/getPubSub.cpp
137159
$(CXX) $(CXXFLAGS) -o tests/health/getPubSub $(SRCS) $(EXAMPLES_DIR)/health/getPubSub.cpp $(LDFLAGS)
160+
getStorage: $(SRCS) $(EXAMPLES_DIR)/health/getStorage.cpp
161+
$(CXX) $(CXXFLAGS) -o tests/health/getStorage $(SRCS) $(EXAMPLES_DIR)/health/getStorage.cpp $(LDFLAGS)
162+
getStorageLocal: $(SRCS) $(EXAMPLES_DIR)/health/getStorageLocal.cpp
163+
$(CXX) $(CXXFLAGS) -o tests/health/getStorageLocal $(SRCS) $(EXAMPLES_DIR)/health/getStorageLocal.cpp $(LDFLAGS)
164+
getTime: $(SRCS) $(EXAMPLES_DIR)/health/getTime.cpp
165+
$(CXX) $(CXXFLAGS) -o tests/health/getTime $(SRCS) $(EXAMPLES_DIR)/health/getTime.cpp $(LDFLAGS)
166+
getQueue: $(SRCS) $(EXAMPLES_DIR)/health/getQueue.cpp
167+
$(CXX) $(CXXFLAGS) -o tests/health/getQueue $(SRCS) $(EXAMPLES_DIR)/health/getQueue.cpp $(LDFLAGS)
168+
getCertificate: $(SRCS) $(EXAMPLES_DIR)/health/params/getCertificate.cpp
169+
$(CXX) $(CXXFLAGS) -o tests/health/params/getCertificate $(SRCS) $(EXAMPLES_DIR)/health/params/getCertificate.cpp $(LDFLAGS)
170+
getQueueBuilds: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueBuilds.cpp
171+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueBuilds $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueBuilds.cpp $(LDFLAGS)
172+
getQueueCertificates: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueCertificates.cpp
173+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueCertificates $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueCertificates.cpp $(LDFLAGS)
174+
getQueueUsageWebhooks: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueUsageWebhooks.cpp
175+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueUsageWebhooks $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueUsageWebhooks.cpp $(LDFLAGS)
176+
getQueueUsageDump: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueUsageDump.cpp
177+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueUsageDump $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueUsageDump.cpp $(LDFLAGS)
178+
getQueueFunctions: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueFunctions.cpp
179+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueFunctions $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueFunctions.cpp $(LDFLAGS)
180+
getQueueMails: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueMails.cpp
181+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueMails $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueMails.cpp $(LDFLAGS)
182+
getQueueMessaging: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueMessaging.cpp
183+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueMessaging $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueMessaging.cpp $(LDFLAGS)
184+
getQueueMigrations: $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueMigrations.cpp
185+
$(CXX) $(CXXFLAGS) -o tests/health/params/getQueueMigrations $(SRCS) $(EXAMPLES_DIR)/health/params/getQueueMigrations.cpp $(LDFLAGS)
138186

139187
clean:
140188
rm -f tests/*

README.md

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,86 @@
1-
Can we do it?
1+
# Appwrite C++ SDK
22

3-
May God be with us <3
3+
![C++](https://img.shields.io/badge/c++-%2300599C.svg?style=flat-square&logo=c%2B%2B&logoColor=white)
4+
![Appwrite](https://img.shields.io/badge/Appwrite-%23FD366E.svg?style=flat-square&logo=appwrite&logoColor=white)
5+
![GitHub License](https://img.shields.io/github/license/pooranjoyb/cpp-sdk-appwrite)
6+
![Version](https://img.shields.io/badge/api%20version-0.0.1-blue.svg?style=flat-square)
7+
8+
![banner-appwrite](https://github.com/user-attachments/assets/63e7dbad-6a49-4b80-bee2-8e0a46601eec)
9+
10+
## Overview
11+
12+
This **C++ SDK** is built from scratch as a **prototype** for interacting with Appwrite's backend services.
13+
- It allows users to perform a limited set of functionalities as of now,
14+
- including the **creation of databases, collections, and documents**,
15+
- while also enabling the **retrieval of usage statistics** and
16+
- management of **storage** and **account health**.
17+
18+
**This SDK is compatible with Appwrite server version 1.6.x.**
19+
20+
![Appwrite](https://github.com/appwrite/appwrite/raw/main/public/images/github.png)
21+
22+
23+
## Getting Started
24+
25+
### Make Your First Request
26+
27+
Set the neccessary header files.
28+
```cpp
29+
#include "Appwrite.hpp"
30+
```
31+
Once your SDK header is set, create the Appwrite service objects and choose the request to send.
32+
```cpp
33+
std::string projectId = "<your-project-id>";
34+
std::string apiKey = "<your-api-key>";
35+
36+
Appwrite appwrite(projectId);
37+
38+
// for the Databases instance
39+
Databases& databases = appwrite.getDatabases();
40+
databases.setup(apiKey, projectId);
41+
```
42+
43+
### Full Example
44+
```cpp
45+
#include "Appwrite.hpp"
46+
#include <iostream>
47+
48+
int main() {
49+
std::string projectId = "<your-project-id>";
50+
std::string apiKey = "<your-api-key>";
51+
std::string databaseId = "<unique-database-id>";
52+
std::string name = "<unique-database-name>";
53+
bool enabled = true;
54+
55+
Appwrite appwrite(projectId);
56+
Databases& databases = appwrite.getDatabases();
57+
58+
databases.setup(apiKey, projectId);
59+
std::string response = databases.create(databaseId, name, enabled);
60+
61+
return 0;
62+
}
63+
64+
```
65+
### Error Handling
66+
67+
The Appwrite C++ SDK raises `AppwriteException` object with `message`, `code` and `response` properties. You can handle any errors by catching `AppwriteException` and present the `message` to the user or handle it yourself based on the provided error information. Below is an example.
68+
69+
```cpp
70+
try {
71+
// Send some request here
72+
} catch (const AppwriteException& ex) {
73+
std::cerr << "Exception: " << ex.what() << std::endl;
74+
}
75+
```
76+
77+
For a more detailed view of the implementations, please check out the example directory. [Example](/examples/)
78+
79+
### Learn more
80+
You can use the following resources to learn more and get help
81+
- 🚀 [Getting Started Tutorial](youtube-link)
82+
- 📜 [C++ SDK Docs](/docs)
83+
84+
85+
## License
86+
This project is licensed under the MIT License, and further details can be found in the [LICENSE](LICENSE) file.

docs/Account.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
## Class: Account
2+
Works around with User Account in Appwrite
3+
4+
### Core
5+
6+
| Method Name | Usage | Link |
7+
|-------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------|
8+
| `createAccount()` | Creates an account in the Appwrite project. | [Example](/examples/account/createAccount.cpp) |
9+
| `createSession()` | Creates an session in the Appwrite project. | [Example](/examples/account/createSession.cpp) |

docs/Databases.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Works around with Databases in Appwrite
99
| `get()` | Fetches the database from the Appwrite project using the unique database ID. | [Example](/examples/database/getDatabase.cpp) |
1010
| `list()` | Retrieves a list of all databases in the Appwrite project. | [Example](/examples/database/listDatabase.cpp) |
1111
| `update()` | Updates a databases details in the Appwrite project. | [Example](/examples/database/updateDatabase.cpp) |
12+
| `getDatabaseUsage()` | Fetches databases Usage details in the Appwrite project. | [Example](/examples/database/getDatabaseUsage.cpp) |
13+
| `getCollectionUsage()` | Fetches collection Usage details in the Appwrite project. | [Example](/examples/database/getCollectionUsage.cpp) |
1214

1315

1416
### Collections
@@ -36,10 +38,25 @@ Works around with Databases in Appwrite
3638
| `updateFloatAttribute()` | Updates Float Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/updateFloatAttribute.cpp) |
3739
| `createIntegerAttribute()` | Create Integer Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/createIntegerAttribute.cpp) |
3840
| `updateIntegerAttribute()` | Update Integer Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/updateIntegerAttribute.cpp) |
41+
| `createIPaddressAttribute()` | Create IP Address Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/createIPaddressAttribute.cpp) |
42+
| `updateIPaddressAttribute()` | Update IP Address Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/updateIPaddressAttribute.cpp) |
43+
| `createStringAttribute()` | Create String Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/createStringAttribute.cpp) |
44+
| `updateStringAttribute()` | Update String Attribute in the database in the Appwrite project | [Example](/examples/database/collection/attribute/updateStringAttribute.cpp) |
3945

46+
### Indexes
47+
48+
| Method Name | Usage | Link |
49+
|-------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------|
50+
| `listIndexes()` | List all Indexes from the Collection in the database in the Appwrite project | [Example](/examples/database/collection/indexes/listIndexes.cpp) |
51+
| `createIndex()` | Create Indexes in the Collection in the Appwrite project | [Example](/examples/database/collection/indexes/createIndex.cpp) |
52+
| `getIndex()` | Fetch Indexes in the Collection in the Appwrite project | [Example](/examples/database/collection/indexes/getIndex.cpp) |
53+
| `deleteIndex()` | Delete Indexes in the Collection in the Appwrite project | [Example](/examples/database/collection/indexes/deleteIndex.cpp) |
4054

4155
### Documents
4256

4357
| Method Name | Usage | Link |
4458
|-------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------|
45-
| `createDocument` | Creates a new Document in the Appwrite Collection. | [Example](/examples/database/createDocument.cpp) |
59+
| `createDocument` | Creates a new Document in the Appwrite Collection. | [Example](/examples/database/collection/document/createDocument.cpp) |
60+
| `deleteDocument` | Delete Document in the Appwrite Collection. | [Example](/examples/database/collection/document/deleteDocument.cpp) |
61+
| `getDocument` | Fetches the Document in the Appwrite Collection. | [Example](/examples/database/collection/document/getDocument.cpp) |
62+
| `listDocument` | Retrives a list of Document in the Appwrite Collection. | [Example](/examples/database/collection/document/listDocument.cpp) |

docs/Health.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,16 @@ Works around with Health Checks in Appwrite
1010
| `getCache()` | Fetches the cache status in the Appwrite project. | [Example](/examples/health/getCache.cpp) |
1111
| `getDB()` | Fetches the DB in the Appwrite project. | [Example](/examples/health/getDB.cpp) |
1212
| `getPubSub()` | Fetches the PubSub status in the Appwrite project. | [Example](/examples/health/getPubSub.cpp) |
13+
| `getStorage()` | Fetches the Storage status in the Appwrite project. | [Example](/examples/health/getStorage.cpp) |
14+
| `getStorageLocal()` | Fetches the Local storage status in the Appwrite project. | [Example](/examples/health/getStorageLocal.cpp) |
15+
| `getTime()` | Fetches the time status in the Appwrite project. | [Example](/examples/health/getTime.cpp) |
16+
| `getQueue()` | Fetches the queue status in the Appwrite project. | [Example](/examples/health/getQueue.cpp) |
17+
| `getCertificate()` | Fetches the certificate status in the Appwrite project. | [Example](/examples/health/params/getCertificate.cpp) |
18+
| `getQueueMails()` | Fetches the queue mails status in the Appwrite project. | [Example](/examples/health/params/getQueueMails.cpp) |
19+
| `getQueueCertificates()` | Fetches the Queue Certificates status in the Appwrite project. | [Example](/examples/health/params/getQueueCertificates.cpp) |
20+
| `getQueueBuilds()` | Fetches the Queue Builds status in the Appwrite project. | [Example](/examples/health/params/getQueueBuilds.cpp) |
21+
| `getQueueMessaging()` | Fetches the Queue Messaging status in the Appwrite project. | [Example](/examples/health/params/getQueueMessaging.cpp) |
22+
| `getQueueMigrations()` | Fetches the Queue Migrations status in the Appwrite project. | [Example](/examples/health/params/getQueueMigrations.cpp) |
23+
| `getQueueFunctions()` | Fetches the Queue Functions status in the Appwrite project. | [Example](/examples/health/params/getQueueFunctions.cpp) |
24+
| `getQueueUsageWebhooks()` | Fetches the Queue Usage Webhooks status in the Appwrite project. | [Example](/examples/health/params/getQueueUsageWebhooks.cpp) |
25+
| `getQueueUsageDump()` | Fetches the Queue Usage Dump status in the Appwrite project. | [Example](/examples/health/params/getQueueUsageDump.cpp) |
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "Appwrite.hpp"
2+
#include <iostream>
3+
4+
int main() {
5+
std::string projectId = "66fbb5a100070a3a1d19";
6+
std::string apiKey = "";
7+
std::string databaseId = "database123";
8+
std::string collectionId = "test1234";
9+
std::string attributeId = "IPA123";
10+
bool required = true;
11+
std::string new_key = "UpdatedIPaddress123";
12+
std::string defaultValue = "";
13+
14+
Appwrite appwrite(projectId);
15+
Databases& databases = appwrite.getDatabases();
16+
17+
databases.setup(apiKey, projectId);
18+
19+
try {
20+
std::string response = databases.updateIPaddressAttribute(databaseId, collectionId, attributeId, required, defaultValue, new_key);
21+
std::cout << "IP Address attribute updated successfully!\nResponse: " << response << std::endl;
22+
} catch (const AppwriteException& ex) {
23+
std::cerr << "Appwrite exception: " << ex.what() << std::endl;
24+
} catch (const std::exception& ex) {
25+
std::cerr << "Standard exception: " << ex.what() << std::endl;
26+
}
27+
28+
return 0;
29+
}

0 commit comments

Comments
 (0)