@@ -8,34 +8,9 @@ use std::error::Error;
88
99#[ tokio:: main]
1010async fn main ( ) -> Result < ( ) , Box < dyn Error + Send + Sync > > {
11- let account = std:: env:: var ( "ADLSGEN2_STORAGE_ACCOUNT" )
12- . expect ( "Set env variable ADLSGEN2_STORAGE_ACCOUNT first!" ) ;
13- let master_key = std:: env:: var ( "ADLSGEN2_STORAGE_MASTER_KEY" )
14- . expect ( "Set env variable ADLSGEN2_STORAGE_MASTER_KEY first!" ) ;
15-
16- let now = Utc :: now ( ) ;
17- let file_system_name = format ! ( "azurerustsdk-datalake-example01-{}" , now. timestamp( ) ) ;
18-
19- let http_client = new_http_client ( ) ;
20-
21- let storage_account_client =
22- StorageAccountClient :: new_access_key ( http_client. clone ( ) , & account, & master_key) ;
23-
24- let resource_id = "https://storage.azure.com/" ;
25- println ! ( "getting bearer token for '{}'..." , resource_id) ;
26- let bearer_token = DefaultAzureCredential :: default ( )
27- . get_token ( resource_id)
28- . await ?;
29- println ! ( "token expires on {}\n " , bearer_token. expires_on) ;
30-
31- let storage_client = storage_account_client. as_storage_client ( ) ;
32- let data_lake_client = DataLakeClient :: new (
33- storage_client,
34- account,
35- bearer_token. token . secret ( ) . to_owned ( ) ,
36- None ,
37- ) ;
11+ let data_lake_client = create_data_lake_client ( ) . await . unwrap ( ) ;
3812
13+ let file_system_name = format ! ( "azurerustsdk-datalake-example01-{}" , Utc :: now( ) . timestamp( ) ) ;
3914 let file_system_client = data_lake_client
4015 . clone ( )
4116 . into_file_system_client ( file_system_name. to_string ( ) ) ;
@@ -52,67 +27,81 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
5227 . await ?;
5328 println ! ( "create file response == {:?}\n " , create_file_response) ;
5429
55- println ! ( "creating file '{}' (overwrite)..." , file_path) ;
56- let create_file_response = file_system_client
57- . create_file ( Context :: default ( ) , file_path, FileCreateOptions :: default ( ) )
58- . await ?;
59- println ! ( "create file response == {:?}\n " , create_file_response) ;
30+ let string1 = "some data" ;
31+ let data1 = bytes:: Bytes :: from ( string1) ;
32+ let data1_length = data1. len ( ) as i64 ;
33+
34+ let string2 = "some more data" ;
35+ let data2 = bytes:: Bytes :: from ( string2) ;
36+ let data2_length = data2. len ( ) as i64 ;
6037
61- println ! ( "creating file '{}' if not exists..." , file_path) ;
62- let create_file_if_not_exists_result = file_system_client
63- . create_file_if_not_exists ( Context :: default ( ) , file_path)
64- . await ;
65- println ! (
66- "create file result (should fail) == {:?}\n " ,
67- create_file_if_not_exists_result
68- ) ;
69-
70- println ! ( "appending to file '{}'..." , file_path) ;
71- let bytes = bytes:: Bytes :: from ( "some data" ) ;
72- let file_length = bytes. len ( ) as i64 ;
38+ println ! ( "appending '{}' to file '{}'..." , string1, file_path) ;
7339 let append_to_file_response = file_system_client
7440 . append_to_file (
7541 Context :: default ( ) ,
7642 file_path,
77- bytes ,
43+ data1 ,
7844 0 ,
7945 FileAppendOptions :: default ( ) ,
8046 )
8147 . await ?;
8248 println ! ( "append to file response == {:?}\n " , append_to_file_response) ;
8349
50+ println ! ( "appending '{}' to file '{}'..." , string2, file_path) ;
51+ let append_to_file_response = file_system_client
52+ . append_to_file (
53+ Context :: default ( ) ,
54+ file_path,
55+ data2,
56+ data1_length,
57+ FileAppendOptions :: default ( ) ,
58+ )
59+ . await ?;
60+ println ! ( "append to file response == {:?}\n " , append_to_file_response) ;
61+
8462 println ! ( "flushing file '{}'..." , file_path) ;
8563 let flush_file_response = file_system_client
8664 . flush_file (
8765 Context :: default ( ) ,
8866 file_path,
89- file_length ,
67+ data1_length + data2_length ,
9068 true ,
9169 FileFlushOptions :: default ( ) ,
9270 )
9371 . await ?;
9472 println ! ( "flush file response == {:?}\n " , flush_file_response) ;
9573
96- let destination_file_path = "some/path/example-file-renamed.txt" ;
97- println ! (
98- "renaming file '{}' to '{}'..." ,
99- file_path, destination_file_path
100- ) ;
101- let rename_file_response = file_system_client
102- . rename_file (
103- Context :: default ( ) ,
104- file_path,
105- destination_file_path,
106- FileRenameOptions :: default ( ) ,
107- )
108- . await ?;
109- println ! ( "rename file response == {:?}\n " , rename_file_response) ;
110-
11174 println ! ( "deleting file system..." ) ;
11275 let delete_fs_response = file_system_client. delete ( ) . execute ( ) . await ?;
11376 println ! ( "delete file system response == {:?}\n " , delete_fs_response) ;
11477
115- println ! ( "data lake example 01 done." ) ;
116-
11778 Ok ( ( ) )
11879}
80+
81+ async fn create_data_lake_client ( ) -> Result < DataLakeClient , Box < dyn Error + Send + Sync > > {
82+ let account = std:: env:: var ( "ADLSGEN2_STORAGE_ACCOUNT" )
83+ . expect ( "Set env variable ADLSGEN2_STORAGE_ACCOUNT first!" ) ;
84+ let master_key = std:: env:: var ( "ADLSGEN2_STORAGE_MASTER_KEY" )
85+ . expect ( "Set env variable ADLSGEN2_STORAGE_MASTER_KEY first!" ) ;
86+
87+ let http_client = new_http_client ( ) ;
88+
89+ let storage_account_client =
90+ StorageAccountClient :: new_access_key ( http_client. clone ( ) , & account, & master_key) ;
91+
92+ let resource_id = "https://storage.azure.com/" ;
93+ println ! ( "getting bearer token for '{}'..." , resource_id) ;
94+ let bearer_token = DefaultAzureCredential :: default ( )
95+ . get_token ( resource_id)
96+ . await ?;
97+ println ! ( "token expires on {}\n " , bearer_token. expires_on) ;
98+
99+ let storage_client = storage_account_client. as_storage_client ( ) ;
100+
101+ Ok ( DataLakeClient :: new (
102+ storage_client,
103+ account,
104+ bearer_token. token . secret ( ) . to_owned ( ) ,
105+ None ,
106+ ) )
107+ }
0 commit comments