Skip to content

Commit ada76f9

Browse files
authored
refactor(bindings/dart)!: support macos and use exists api (#5884)
Signed-off-by: yihong0618 <[email protected]>
1 parent 7047ec3 commit ada76f9

File tree

6 files changed

+86
-50
lines changed

6 files changed

+86
-50
lines changed

.github/workflows/ci_bindings_dart.yml

+4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ jobs:
7777
working-directory: bindings/dart
7878
run: flutter pub get
7979

80+
- name: Check Clippy
81+
working-directory: bindings/dart/rust
82+
run: cargo clippy -- -D warnings
83+
8084
- name: build lib
8185
working-directory: bindings/dart/rust
8286
run: |

bindings/dart/lib/opendal.dart

+47-9
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,49 @@ class Storage {
3636
var path = "rust/target/release/"; // default path
3737
final name = Platform.operatingSystem;
3838
final arch = SysInfo.kernelArchitecture;
39-
// if (name == "linux" && arch == "x86_64"){
40-
// path = "rust/target/x86_64-unknown-linux-gnu/release/";
41-
// }
42-
// todo: more system and arch
43-
39+
// Set appropriate binary path based on OS and architecture
40+
final nameLower = name.toLowerCase();
41+
final archLower = arch.toString().toLowerCase();
42+
43+
if (nameLower == "linux") {
44+
if (archLower == "x86_64") {
45+
path = "rust/target/x86_64-unknown-linux-gnu/release/";
46+
} else if (archLower == "aarch64" || archLower == "arm64") {
47+
path = "rust/target/aarch64-unknown-linux-gnu/release/";
48+
} else if (archLower == "arm") {
49+
path = "rust/target/armv7-unknown-linux-gnueabihf/release/";
50+
}
51+
} else if (nameLower == "windows") {
52+
if (archLower == "x86_64" || archLower == "amd64") {
53+
path = "rust/target/x86_64-pc-windows-msvc/release/";
54+
} else if (archLower == "x86" || archLower == "i386") {
55+
path = "rust/target/i686-pc-windows-msvc/release/";
56+
} else if (archLower == "aarch64" || archLower == "arm64") {
57+
path = "rust/target/aarch64-pc-windows-msvc/release/";
58+
}
59+
} else if (nameLower == "macos") {
60+
if (archLower == "x86_64") {
61+
path = "rust/target/x86_64-apple-darwin/release/";
62+
} else if (archLower == "aarch64" || archLower == "arm64") {
63+
path = "rust/target/aarch64-apple-darwin/release/";
64+
}
65+
} else if (nameLower == "android") {
66+
if (archLower == "aarch64" || archLower == "arm64") {
67+
path = "rust/target/aarch64-linux-android/release/";
68+
} else if (archLower == "x86_64") {
69+
path = "rust/target/x86_64-linux-android/release/";
70+
} else if (archLower == "x86" || archLower == "i386") {
71+
path = "rust/target/i686-linux-android/release/";
72+
} else if (archLower == "arm") {
73+
path = "rust/target/armv7-linux-androideabi/release/";
74+
}
75+
} else if (nameLower == "ios") {
76+
if (archLower == "aarch64" || archLower == "arm64") {
77+
path = "rust/target/aarch64-apple-ios/release/";
78+
} else if (archLower == "x86_64") {
79+
path = "rust/target/x86_64-apple-ios/release/";
80+
}
81+
}
4482
var config = ExternalLibraryLoaderConfig( // https://github.com/fzyzcjy/flutter_rust_bridge/issues/2460
4583
stem: 'opendal_dart',
4684
ioDirectory: path,
@@ -70,11 +108,11 @@ class File {
70108
: _operator = operator;
71109

72110
Future<bool> exists() {
73-
return _operator.isExist(path: path);
111+
return _operator.exists(path: path);
74112
}
75113

76114
bool existsSync() {
77-
return _operator.isExistSync(path: path);
115+
return _operator.existsSync(path: path);
78116
}
79117

80118
Future<Metadata> stat() {
@@ -118,11 +156,11 @@ class Directory {
118156
}
119157

120158
Future<bool> exists() {
121-
return _operator.isExist(path: path);
159+
return _operator.exists(path: path);
122160
}
123161

124162
bool existsSync() {
125-
return _operator.isExistSync(path: path);
163+
return _operator.existsSync(path: path);
126164
}
127165

128166
Future<void> rename(String newPath) {

bindings/dart/lib/src/rust/api/opendal_api.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ abstract class Operator implements RustOpaqueInterface {
4747

4848
void deleteSync({required String path});
4949

50-
Future<bool> isExist({required String path});
50+
Future<bool> exists({required String path});
5151

52-
bool isExistSync({required String path});
52+
bool existsSync({required String path});
5353

5454
factory Operator(
5555
{required String schemeStr, required Map<String, String> map}) =>

bindings/dart/lib/src/rust/frb_generated.dart

+15-15
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
6666
String get codegenVersion => '2.8.0';
6767

6868
@override
69-
int get rustContentHash => 229275691;
69+
int get rustContentHash => 775125233;
7070

7171
static const kDefaultExternalLibraryLoaderConfig =
7272
ExternalLibraryLoaderConfig(
@@ -108,10 +108,10 @@ abstract class RustLibApi extends BaseApi {
108108
void crateApiOpendalApiOperatorDeleteSync(
109109
{required Operator that, required String path});
110110

111-
Future<bool> crateApiOpendalApiOperatorIsExist(
111+
Future<bool> crateApiOpendalApiOperatorExists(
112112
{required Operator that, required String path});
113113

114-
bool crateApiOpendalApiOperatorIsExistSync(
114+
bool crateApiOpendalApiOperatorExistsSync(
115115
{required Operator that, required String path});
116116

117117
Operator crateApiOpendalApiOperatorNew(
@@ -492,7 +492,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
492492
);
493493

494494
@override
495-
Future<bool> crateApiOpendalApiOperatorIsExist(
495+
Future<bool> crateApiOpendalApiOperatorExists(
496496
{required Operator that, required String path}) {
497497
return handler.executeNormal(NormalTask(
498498
callFfi: (port_) {
@@ -507,20 +507,20 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
507507
decodeSuccessData: sse_decode_bool,
508508
decodeErrorData: null,
509509
),
510-
constMeta: kCrateApiOpendalApiOperatorIsExistConstMeta,
510+
constMeta: kCrateApiOpendalApiOperatorExistsConstMeta,
511511
argValues: [that, path],
512512
apiImpl: this,
513513
));
514514
}
515515

516-
TaskConstMeta get kCrateApiOpendalApiOperatorIsExistConstMeta =>
516+
TaskConstMeta get kCrateApiOpendalApiOperatorExistsConstMeta =>
517517
const TaskConstMeta(
518-
debugName: "Operator_is_exist",
518+
debugName: "Operator_exists",
519519
argNames: ["that", "path"],
520520
);
521521

522522
@override
523-
bool crateApiOpendalApiOperatorIsExistSync(
523+
bool crateApiOpendalApiOperatorExistsSync(
524524
{required Operator that, required String path}) {
525525
return handler.executeSync(SyncTask(
526526
callFfi: () {
@@ -534,15 +534,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
534534
decodeSuccessData: sse_decode_bool,
535535
decodeErrorData: null,
536536
),
537-
constMeta: kCrateApiOpendalApiOperatorIsExistSyncConstMeta,
537+
constMeta: kCrateApiOpendalApiOperatorExistsSyncConstMeta,
538538
argValues: [that, path],
539539
apiImpl: this,
540540
));
541541
}
542542

543-
TaskConstMeta get kCrateApiOpendalApiOperatorIsExistSyncConstMeta =>
543+
TaskConstMeta get kCrateApiOpendalApiOperatorExistsSyncConstMeta =>
544544
const TaskConstMeta(
545-
debugName: "Operator_is_exist_sync",
545+
debugName: "Operator_exists_sync",
546546
argNames: ["that", "path"],
547547
);
548548

@@ -1257,11 +1257,11 @@ class OperatorImpl extends RustOpaque implements Operator {
12571257
void deleteSync({required String path}) => RustLib.instance.api
12581258
.crateApiOpendalApiOperatorDeleteSync(that: this, path: path);
12591259

1260-
Future<bool> isExist({required String path}) => RustLib.instance.api
1261-
.crateApiOpendalApiOperatorIsExist(that: this, path: path);
1260+
Future<bool> exists({required String path}) => RustLib.instance.api
1261+
.crateApiOpendalApiOperatorExists(that: this, path: path);
12621262

1263-
bool isExistSync({required String path}) => RustLib.instance.api
1264-
.crateApiOpendalApiOperatorIsExistSync(that: this, path: path);
1263+
bool existsSync({required String path}) => RustLib.instance.api
1264+
.crateApiOpendalApiOperatorExistsSync(that: this, path: path);
12651265

12661266
Future<void> rename({required String from, required String to}) =>
12671267
RustLib.instance.api

bindings/dart/rust/src/api/opendal_api.rs

+9-13
Original file line numberDiff line numberDiff line change
@@ -42,39 +42,36 @@ impl Operator {
4242

4343
Metadata(meta)
4444
}
45-
pub async fn check(&self) -> () {
45+
pub async fn check(&self) {
4646
self.0.check().await.unwrap()
4747
}
48-
pub async fn is_exist(&self, path: String) -> bool {
49-
self.0.is_exist(&path).await.unwrap()
48+
pub async fn exists(&self, path: String) -> bool {
49+
self.0.exists(&path).await.unwrap()
5050
}
51-
pub async fn delete(&self, path: String) -> () {
51+
pub async fn delete(&self, path: String) {
5252
self.0.delete(&path).await.unwrap()
5353
}
5454
#[frb(sync)]
5555
pub fn delete_sync(&self, path: String) -> () {
5656
self.0.blocking().delete(&path).unwrap()
5757
}
5858
#[frb(sync)]
59-
pub fn is_exist_sync(&self, path: String) -> bool {
60-
self.0.blocking().is_exist(&path).unwrap()
59+
pub fn exists_sync(&self, path: String) -> bool {
60+
self.0.blocking().exists(&path).unwrap()
6161
}
62-
pub async fn create_dir(&self, path: String) -> () {
62+
pub async fn create_dir(&self, path: String) {
6363
self.0.create_dir(&path).await.unwrap()
6464
}
6565
#[frb(sync)]
6666
pub fn create_dir_sync(&self, path: String) -> () {
6767
self.0.blocking().create_dir(&path).unwrap()
6868
}
69-
pub async fn rename(&self, from: String, to: String) -> () {
69+
pub async fn rename(&self, from: String, to: String) {
7070
self.0.rename(&from, &to).await.unwrap()
7171
}
7272
#[frb(sync)]
7373
pub fn rename_sync(&self, from: String, to: String) -> () {
74-
self.0
75-
.blocking()
76-
.rename(&from, &to)
77-
.unwrap()
74+
self.0.blocking().rename(&from, &to).unwrap()
7875
}
7976
}
8077

@@ -132,4 +129,3 @@ impl Metadata {
132129
self.0.last_modified().map(|ta| ta.to_rfc3339())
133130
}
134131
}
135-

bindings/dart/rust/src/frb_generated.rs

+9-11
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ flutter_rust_bridge::frb_generated_boilerplate!(
3838
default_rust_auto_opaque = RustAutoOpaqueMoi,
3939
);
4040
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.8.0";
41-
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 229275691;
41+
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 775125233;
4242

4343
// Section: executor
4444

@@ -705,15 +705,15 @@ fn wire__crate__api__opendal_api__Operator_delete_sync_impl(
705705
},
706706
)
707707
}
708-
fn wire__crate__api__opendal_api__Operator_is_exist_impl(
708+
fn wire__crate__api__opendal_api__Operator_exists_impl(
709709
port_: flutter_rust_bridge::for_generated::MessagePort,
710710
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
711711
rust_vec_len_: i32,
712712
data_len_: i32,
713713
) {
714714
FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::<flutter_rust_bridge::for_generated::SseCodec, _, _, _>(
715715
flutter_rust_bridge::for_generated::TaskInfo {
716-
debug_name: "Operator_is_exist",
716+
debug_name: "Operator_exists",
717717
port: Some(port_),
718718
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
719719
},
@@ -753,7 +753,7 @@ fn wire__crate__api__opendal_api__Operator_is_exist_impl(
753753
}
754754
let api_that_guard = api_that_guard.unwrap();
755755
let output_ok = Result::<_, ()>::Ok(
756-
crate::api::opendal_api::Operator::is_exist(&*api_that_guard, api_path)
756+
crate::api::opendal_api::Operator::exists(&*api_that_guard, api_path)
757757
.await,
758758
)?;
759759
Ok(output_ok)
@@ -764,14 +764,14 @@ fn wire__crate__api__opendal_api__Operator_is_exist_impl(
764764
},
765765
)
766766
}
767-
fn wire__crate__api__opendal_api__Operator_is_exist_sync_impl(
767+
fn wire__crate__api__opendal_api__Operator_exists_sync_impl(
768768
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
769769
rust_vec_len_: i32,
770770
data_len_: i32,
771771
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
772772
FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::<flutter_rust_bridge::for_generated::SseCodec, _>(
773773
flutter_rust_bridge::for_generated::TaskInfo {
774-
debug_name: "Operator_is_exist_sync",
774+
debug_name: "Operator_exists_sync",
775775
port: None,
776776
mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync,
777777
},
@@ -806,7 +806,7 @@ fn wire__crate__api__opendal_api__Operator_is_exist_sync_impl(
806806
}
807807
let api_that_guard = api_that_guard.unwrap();
808808
let output_ok = Result::<_, ()>::Ok(
809-
crate::api::opendal_api::Operator::is_exist_sync(&*api_that_guard, api_path),
809+
crate::api::opendal_api::Operator::exists_sync(&*api_that_guard, api_path),
810810
)?;
811811
Ok(output_ok)
812812
})())
@@ -1258,7 +1258,7 @@ fn pde_ffi_dispatcher_primary_impl(
12581258
wire__crate__api__opendal_api__Operator_delete_impl(port, ptr, rust_vec_len, data_len)
12591259
}
12601260
14 => {
1261-
wire__crate__api__opendal_api__Operator_is_exist_impl(port, ptr, rust_vec_len, data_len)
1261+
wire__crate__api__opendal_api__Operator_exists_impl(port, ptr, rust_vec_len, data_len)
12621262
}
12631263
17 => {
12641264
wire__crate__api__opendal_api__Operator_rename_impl(port, ptr, rust_vec_len, data_len)
@@ -1298,9 +1298,7 @@ fn pde_ffi_dispatcher_sync_impl(
12981298
data_len,
12991299
),
13001300
13 => wire__crate__api__opendal_api__Operator_delete_sync_impl(ptr, rust_vec_len, data_len),
1301-
15 => {
1302-
wire__crate__api__opendal_api__Operator_is_exist_sync_impl(ptr, rust_vec_len, data_len)
1303-
}
1301+
15 => wire__crate__api__opendal_api__Operator_exists_sync_impl(ptr, rust_vec_len, data_len),
13041302
16 => wire__crate__api__opendal_api__Operator_new_impl(ptr, rust_vec_len, data_len),
13051303
18 => wire__crate__api__opendal_api__Operator_rename_sync_impl(ptr, rust_vec_len, data_len),
13061304
20 => wire__crate__api__opendal_api__Operator_stat_sync_impl(ptr, rust_vec_len, data_len),

0 commit comments

Comments
 (0)