Skip to content

Commit 0962f58

Browse files
committed
wip: data assets
1 parent c1ea671 commit 0962f58

File tree

6 files changed

+205
-18
lines changed

6 files changed

+205
-18
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ auth_example:
1515

1616
data_model_example:
1717
cargo run --example data_model
18+
1819
data_asset_example:
1920
cargo run --example data_asset
2021

2122

22-
2323
chmod:
2424
chmod +x $(SCRIPT_PATH)
2525

examples/account.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
99
dotenv().ok();
1010

1111
// Initialize SDK with configuration
12-
let bearer_token = env::var("BEARER_TOKEN").expect("BEARER_TOKEN must be set in environment");
12+
// let bearer_token = env::var("BEARER_TOKEN").expect("BEARER_TOKEN must be set in environment");
1313
let api_url =
1414
env::var("API_URL").unwrap_or_else(|_| "https://dev.api.gateway.tech".to_string());
1515

@@ -18,7 +18,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
1818
bearer_token: None,
1919
wallet: Some(WalletType::Sui),
2020
private_key: Some(
21-
"".to_string(),
21+
"suiprivkey1qrzsed4w84wwnemtxnl4837prl2usns48qvgarunes8m28ccet49xjyaezj".to_string(),
2222
),
2323
};
2424

examples/data_asset.rs

+61-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use dotenv::dotenv;
2+
use gtw_rs_sdk::models::DtoCreateDataAssetRequest;
23
use gtw_rs_sdk::{GtwSDK, SdkConfig};
4+
use serde_json::{Map, Value};
35
use std::env;
46
use std::fs::File;
57
use std::io::Read;
@@ -11,40 +13,91 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
1113
dotenv().ok();
1214

1315
// Initialize SDK with configuration
14-
let bearer_token = env::var("BEARER_TOKEN").expect("BEARER_TOKEN must be set in environment");
16+
// let bearer_token = env::var("BEARER_TOKEN").expect("BEARER_TOKEN must be set in environment");
17+
let bearer_token: &str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiJkaWQ6Z2F0ZXdheWlkOmdhdGV3YXk6ZDgxMTFiMjJhYzk4MDE0Y2U4MzJmM2E2ZjY0OGQxZDZhYzBlZjgzMzA5NGQyYTliZmMyNjkwMDQ4OGFjYjlhZCIsImV4cCI6MTczMDYwODc4Niwid2FsbGV0X2FkZHJlc3MiOiIweDEyNWI5NjhGOWFjNDJGMzNiMGUxZjFGQkViZUUwMTZDYTI0QTcxMTYifQ.3E2MIOF4Xhl9xRvqvrAIJZA7RDwzaEDyPRX4MrXw-7M";
1518
let api_url =
1619
env::var("API_URL").unwrap_or_else(|_| "https://dev.api.gateway.tech".to_string());
1720

1821
let sdk_config = SdkConfig {
1922
api_url: Some(api_url),
20-
bearer_token: Some(bearer_token),
23+
bearer_token: Some(bearer_token.to_string()),
2124
wallet: None,
2225
private_key: None,
2326
};
2427

2528
let gtw_sdk = GtwSDK::new(sdk_config).await?;
2629

27-
28-
let file_name = "/home/manish/Development/Gateway Projects/gtw-rs-sdk/examples/h.png"; // Replace with your full image file path
30+
// Create file based data asset
31+
let file_name = "./Cargo.toml";
2932
let mut file = File::open(file_name)?;
3033
let mut file_buffer = Vec::new();
3134
file.read_to_end(&mut file_buffer)?;
3235

33-
let acl_list = None; // Optionally set your ACL list
34-
let expiration_date = None; // Optionally set your expiration date
36+
let acl_list = None;
37+
let expiration_date = None;
3538

3639
match gtw_sdk
3740
.data_asset
3841
.upload_file(file_name, file_buffer, acl_list, expiration_date)
3942
.await
4043
{
4144
Ok(response) => {
42-
println!("Image uploaded successfully: {:?}", response);
45+
println!("File uploaded successfully: {:?}", response);
4346
}
4447
Err(e) => {
45-
eprintln!("Failed to upload image: {}", e);
48+
eprintln!("Failed to upload file: {}", e);
4649
}
4750
}
51+
let id: u64 = 6642530451980391;
4852

53+
match gtw_sdk.data_asset.get_created_by_me(None, None).await {
54+
Ok(response) => {
55+
println!("get created by me successfully: {:?}", response);
56+
}
57+
Err(e) => {
58+
eprintln!("Failed created by me: {}", e);
59+
}
60+
}
61+
62+
match gtw_sdk.data_asset.get_received_by_me(None, None).await {
63+
Ok(response) => {
64+
println!("get received by me successfully: {:?}", response);
65+
}
66+
Err(e) => {
67+
eprintln!("Failed received by me: {}", e);
68+
}
69+
}
70+
71+
match gtw_sdk.data_asset.get(id).await {
72+
Ok(response) => {
73+
println!("get by id successfully: {:?}", response);
74+
}
75+
Err(e) => {
76+
eprintln!("Failed : {}", e);
77+
}
78+
}
79+
80+
81+
82+
let mut claim = Map::new();
83+
claim.insert("firstName".to_string(), Value::String("John Doe".to_string()));
84+
85+
let upload_request = DtoCreateDataAssetRequest {
86+
claim,
87+
name: "test".to_string(),
88+
acl: vec![],
89+
data_model_id: None,
90+
expiration_date: None,
91+
tags: vec![String::from("Personal"), String::from("Data Model")],
92+
};
93+
94+
match gtw_sdk.data_asset.upload(upload_request).await {
95+
Ok(response) => {
96+
println!("Normal data asset created successfully: {:?}", response);
97+
}
98+
Err(e) => {
99+
eprintln!("Failed to create data asset: {}", e);
100+
}
101+
}
49102
Ok(())
50103
}

examples/data_model.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ use tokio;
88
async fn main() -> Result<(), Box<dyn std::error::Error>> {
99
dotenv().ok();
1010

11-
let bearer_token = env::var("BEARER_TOKEN").expect("BEARER_TOKEN must be set in environment");
11+
let bearer_token: &str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiJkaWQ6Z2F0ZXdheWlkOmdhdGV3YXk6ZDgxMTFiMjJhYzk4MDE0Y2U4MzJmM2E2ZjY0OGQxZDZhYzBlZjgzMzA5NGQyYTliZmMyNjkwMDQ4OGFjYjlhZCIsImV4cCI6MTczMDYwODc4Niwid2FsbGV0X2FkZHJlc3MiOiIweDEyNWI5NjhGOWFjNDJGMzNiMGUxZjFGQkViZUUwMTZDYTI0QTcxMTYifQ.3E2MIOF4Xhl9xRvqvrAIJZA7RDwzaEDyPRX4MrXw-7M";
1212
let api_url =
1313
env::var("API_URL").unwrap_or_else(|_| "https://dev.api.gateway.tech".to_string());
1414

1515
let sdk_config = SdkConfig {
1616
api_url: Some(api_url),
17-
bearer_token: Some(bearer_token),
17+
bearer_token: Some(bearer_token.to_string()),
1818
wallet: None,
1919
private_key: None,
2020
};

src/apis/data_asset.rs

+138-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use serde_json::json;
2-
use surf::Body;
1+
use helper_generic_paginated_response::HelperGenericPaginatedResponse;
2+
use serde_json::{json, Map};
33
use surf::Client;
44

55
use crate::services::multipart_handler::MultipartFormData;
@@ -40,8 +40,8 @@ impl DataAssetOperationsClient {
4040
let response = self
4141
.client
4242
.post(&url)
43-
.body_json(&body)
44-
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?
43+
.header("Content-Type", "application/json")
44+
.body(body.to_string())
4545
.await
4646
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
4747

@@ -88,6 +88,140 @@ impl DataAssetOperationsClient {
8888

8989
handle_response(response).await
9090
}
91+
92+
pub async fn update_file(
93+
&self,
94+
id: u64,
95+
file_name: &str,
96+
file_buffer: Vec<u8>,
97+
acl_list: Option<DtoAclRequest>,
98+
expiration_date: Option<String>,
99+
) -> Result<DtoDataAssetIdRequestAndResponse, GTWError> {
100+
let mut form = MultipartFormData::new();
101+
102+
let file_info = validate_file_name(file_name)
103+
.map_err(|_| GTWError::UnexpectedError("Error validating file name.".to_string()))?;
104+
105+
// Add file data
106+
form.append_file("data", file_info.name, file_info.mime_type, file_buffer);
107+
108+
// Add ACL if provided
109+
if let Some(acl) = acl_list {
110+
let acl_json = serde_json::to_string(&acl).map_err(|e| {
111+
GTWError::UnexpectedError(format!("Failed to serialize ACL: {}", e))
112+
})?;
113+
form.append_field("acl", &acl_json);
114+
}
115+
116+
if let Some(expiration) = expiration_date {
117+
form.append_field("expiration_date", &expiration);
118+
}
119+
120+
let url = format!("/data-assets/{}", id);
121+
let body = form.build();
122+
123+
let response = self
124+
.client
125+
.put(&url)
126+
.header("Content-Type", form.get_content_type())
127+
.body_bytes(body)
128+
.await
129+
.map_err(|e| GTWError::UnexpectedError(format!("Failed to send request: {}", e)))?;
130+
131+
handle_response(response).await
132+
}
133+
134+
pub async fn get_created_by_me(
135+
&self,
136+
page: Option<u64>,
137+
page_size: Option<u64>,
138+
) -> Result<HelperGenericPaginatedResponse<Vec<DtoPublicDataAsset>>, GTWError> {
139+
let url = "/data-assets/created";
140+
141+
let page = page.unwrap_or(1);
142+
let page_size = page_size.unwrap_or(10);
143+
144+
let mut request_builder = self.client.get(&url);
145+
146+
request_builder = request_builder
147+
.query(&[("page", page), ("page_size", page_size)])
148+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
149+
150+
let response = request_builder
151+
.await
152+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
153+
println!("{:?}", response.status().is_success());
154+
handle_response(response).await
155+
}
156+
157+
pub async fn get_received_by_me(
158+
&self,
159+
page: Option<u64>,
160+
page_size: Option<u64>,
161+
) -> Result<HelperGenericPaginatedResponse<Vec<DtoPublicDataAsset>>, GTWError> {
162+
let url = "/data-assets/received";
163+
164+
let page = page.unwrap_or(1);
165+
let page_size = page_size.unwrap_or(10);
166+
167+
let mut request_builder = self.client.get(&url);
168+
169+
request_builder = request_builder
170+
.query(&[("page", page), ("page_size", page_size)])
171+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
172+
173+
let response = request_builder
174+
.await
175+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
176+
177+
handle_response(response).await
178+
}
179+
180+
pub async fn get(&self, id: u64) -> Result<DtoPublicDataAsset, GTWError> {
181+
let url = format!("/data-assets/{}", id);
182+
183+
let response = self
184+
.client
185+
.get(&url)
186+
.await
187+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
188+
189+
handle_response(response).await
190+
}
191+
192+
pub async fn delete(&self, id: u64) -> Result<DtoMessageResponse, GTWError> {
193+
let url = format!("/data-assets/{}", id);
194+
195+
let response = self
196+
.client
197+
.delete(&url)
198+
.await
199+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
200+
201+
handle_response(response).await
202+
}
203+
204+
pub async fn share(
205+
&self,
206+
id: u64,
207+
wallet_address_list: Vec<String>,
208+
) -> Result<Vec<DtoPublicAcl>, GTWError> {
209+
let url = format!("/data-assets/{}/share", id);
210+
211+
let body = json!({
212+
"addresses": wallet_address_list,
213+
});
214+
215+
let response = self
216+
.client
217+
.post(&url)
218+
.body_json(&body)
219+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?
220+
.await
221+
.map_err(|e| GTWError::NetworkError(SurfErrorWrapper(e)))?;
222+
223+
handle_response(response).await
224+
}
91225
}
92226

93227
pub fn print_form_data(data: &[u8]) {

src/services/sui.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl BlockchainWallet for SuiWalletService {
4141
let public_key = self.wallet.public();
4242

4343
let sui_address = SuiAddress::from(&public_key);
44-
44+
println!("{:?}", signature.as_ref());
4545
Ok(WalletSignMessage {
4646
signature: format!("0x{}", hex_encode(signature.as_ref())),
4747
signing_key: sui_address.to_string(),

0 commit comments

Comments
 (0)