@@ -6,7 +6,7 @@ extern crate lazy_static;
6
6
mod types;
7
7
8
8
use crate :: types:: libsql_config;
9
- use libsql:: { errors, LoadExtensionGuard } ;
9
+ use libsql:: { errors, Builder , LoadExtensionGuard } ;
10
10
use tokio:: runtime:: Runtime ;
11
11
use types:: {
12
12
blob, libsql_connection, libsql_connection_t, libsql_database, libsql_database_t, libsql_row,
@@ -152,6 +152,44 @@ pub unsafe extern "C" fn libsql_open_sync_with_config(
152
152
return 3 ;
153
153
}
154
154
} ;
155
+ let uri: http:: Uri = match primary_url. try_into ( ) {
156
+ Ok ( uri) => uri,
157
+ Err ( e) => {
158
+ set_err_msg ( format ! ( "Wrong primary URL: {e}" ) , out_err_msg) ;
159
+ return 100 ;
160
+ }
161
+ } ;
162
+ if let Some ( query) = uri. query ( ) {
163
+ if query. contains ( "offline" ) {
164
+ let mut builder = Builder :: new_synced_database (
165
+ db_path,
166
+ primary_url. to_owned ( ) ,
167
+ auth_token. to_owned ( ) ,
168
+ ) ;
169
+ if config. with_webpki != 0 {
170
+ let https = hyper_rustls:: HttpsConnectorBuilder :: new ( )
171
+ . with_webpki_roots ( )
172
+ . https_or_http ( )
173
+ . enable_http1 ( )
174
+ . build ( ) ;
175
+ builder = builder. connector ( https) ;
176
+ }
177
+ match RT . block_on ( builder. build ( ) ) {
178
+ Ok ( db) => {
179
+ let db = Box :: leak ( Box :: new ( libsql_database { db } ) ) ;
180
+ * out_db = libsql_database_t:: from ( db) ;
181
+ return 0 ;
182
+ }
183
+ Err ( e) => {
184
+ set_err_msg (
185
+ format ! ( "Error opening offline db path {db_path}, primary url {primary_url}: {e}" ) ,
186
+ out_err_msg,
187
+ ) ;
188
+ return 101 ;
189
+ }
190
+ }
191
+ }
192
+ }
155
193
let mut builder = libsql:: Builder :: new_remote_replica (
156
194
db_path,
157
195
primary_url. to_string ( ) ,
0 commit comments