Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] "symbol new_uint_8_list is already defined" when using String as parameter in multiple rust module #511

Closed
dbsxdbsx opened this issue Jun 13, 2022 · 9 comments
Labels
bug Something isn't working

Comments

@dbsxdbsx
Copy link
Contributor

dbsxdbsx commented Jun 13, 2022

Describe the bug

For multiple separate rust modules, generating code with justfile like this:

gen:
    # api for chess rule
    export REPO_DIR="$PWD"; cd /; flutter_rust_bridge_codegen {{llvm_path}} \
        --rust-input "$REPO_DIR/native/src/rule_api.rs" \
        --rust-output "$REPO_DIR/native/src/gened_rule_api.rs" \
        --dart-output "$REPO_DIR/lib/gened_rule_api.dart" \
        --class-name RuleApi
    # api for connecting ucci engine
    export REPO_DIR="$PWD"; cd /; flutter_rust_bridge_codegen {{llvm_path}} \
        --rust-input "$REPO_DIR/native/src/ucci_api.rs" \
        --rust-output "$REPO_DIR/native/src/gened_ucci_api.rs" \
        --dart-output "$REPO_DIR/lib/gened_ucci_api.dart" \
        --class-name UcciApi \
        --exclude-sync-execution-mode-utility true

    # Uncomment this line to invoke build_runner as well
    flutter pub run build_runner build --delete-conflicting-outputs

Then adding gnererated dart file to ffi.dart:

// This file initializes the dynamic library and connects it with the stub
// generated by flutter_rust_bridge_codegen.

import 'dart:ffi';
import 'dart:io' as io;

import 'gened_rule_api.dart';
import 'gened_ucci_api.dart';
// export 'gened_rule_api.dart';  // no need
// export 'gened_rule_api.dart';  // no need

const _base = 'native';

// On MacOS, the dynamic library is not bundled with the binary,
// but rather directly **linked** against the binary.
final _dylib = io.Platform.isWindows ? '$_base.dll' : 'lib$_base.so';

// The late modifier delays initializing the value until it is actually needed,
// leaving precious little time for the program to quickly start up.
final RuleApi ruleApi = RuleApiImpl(io.Platform.isIOS || io.Platform.isMacOS
    ? DynamicLibrary.executable()
    : DynamicLibrary.open(_dylib));

final UcciApi ucciApi = UcciApiImpl(io.Platform.isIOS || io.Platform.isMacOS
    ? DynamicLibrary.executable()
    : DynamicLibrary.open(_dylib));

I got error:error : symbol new_uint_8_list is already defined [appPath]\build\windows\cargo-build_native.vcxproj].

The direct reasion is that, in both rust modules, String as parameter are neeeded for both rust modules, so in both generated dart files, new_uint_8_list are defined.

How to avoid it?
Giving another flag like exclude_sync_execution_mode_utility , or let flutter_rust_bridge_codegen decide automatically to generated no-conflict api? I prefer the latter one.

Codegen logs with RUST_LOG=debug environment variable

The total log after running `just gen` in gitbash on win10:

$ JUST
RUST_LOG=debug
?[1m# api for chess rule?[0m
?[1mexport REPO_DIR="$PWD"; cd /; flutter_rust_bridge_codegen  --rust-input "$REPO_DIR/native/src/rule_api.rs" --rust-output "$REPO_DIR/native/src/gened_rule_api.rs" --dart-output "$REPO_DIR/lib/gened_rule_api.dart" --class-name RuleApi ?[0m
[2022-06-13T04:28:54Z INFO  lib_flutter_rust_bridge_codegen] Picked config: Opts { rust_input_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native/src/rule_api.rs", dart_output_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/lib/gened_rule_api.dart", dart_decl_output_path: None, c_output_path: ["C:\\Users\\dbsx\\AppData\\Local\\Temp\\.tmpelYuL4.h"], rust_crate_dir: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native", rust_output_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native/src/gened_rule_api.rs", class_name: "RuleApi", dart_format_line_length: 80, skip_add_mod_to_lib: false, llvm_path: ["/opt/homebrew/opt/llvm", "/usr/local/opt/llvm", "/usr/lib/llvm-9", "/usr/lib/llvm-10", "/usr/lib/llvm-11", "/usr/lib/llvm-12", "/usr/lib/llvm-13", "/usr/lib/llvm-14", "/usr/lib/", "/usr/lib64/", "C:/Program Files/llvm", "C:/Program Files/LLVM", "C:/msys64/mingw64"], llvm_compiler_opts: "", manifest_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native\\Cargo.toml", dart_root: Some("D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App"), build_runner:
true, exclude_sync_execution_mode_utility: false }
[2022-06-13T04:28:54Z INFO  lib_flutter_rust_bridge_codegen] Phase: Parse source code to AST
[2022-06-13T04:28:54Z INFO  lib_flutter_rust_bridge_codegen] Phase: Parse AST to IR
[2022-06-13T04:28:55Z INFO  lib_flutter_rust_bridge_codegen] Phase: Transform IR
[2022-06-13T04:28:55Z INFO  lib_flutter_rust_bridge_codegen] Phase: Generate Rust code
[2022-06-13T04:28:55Z INFO  lib_flutter_rust_bridge_codegen] Phase: Generate Dart code
[2022-06-13T04:28:55Z INFO  lib_flutter_rust_bridge_codegen] Phase: Other things
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::BOARD_ARRAY - (not `no_mangle`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::PLAYER - (not `no_mangle`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::ORIG_BOARD_ARRAY - (Unsupported expression. Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 })
}), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs:
[], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma,
Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit:
Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 20 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 19 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 18 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 17 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 16 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 17 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 18 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 19 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 20 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit:
Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt
{ token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 21 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 })
}), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 21 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0
}) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma,
Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt
{ token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0
}) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token:
0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }),
Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 13 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 13 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token:
0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit {
attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit
{ attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 12 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 11 }) }), Comma, Lit(ExprLit { attrs: [],
lit: Int(LitInt { token: 10 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 9 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 8 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 9 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 10 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 11 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 12 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma,
Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit:
Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt
{ token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma] }))
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::CC_KING_DELTA - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::CC_ADVISOR_DELTA - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::CC_BISHOP_DELTA - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::CC_BISHOP_EYE_DELTA - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::ccKnightDelta - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::ccKnightFootDelta - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::BOARD_LEFT_UP_POS - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::BOARD_RIGHT_DOWN_POS - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::FORT_MATRIX - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::IN_BOARD_MATRIX - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::ROW_NUM_TO_STR_MAP - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::ROW_NUM_TO_STR_MAP - (not `no_mangle`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::COL_NUM_TO_STR_MAP - (not `pub`).
[2022-06-13T04:28:55Z WARN  cbindgen::bindgen::parser] Skip native::COL_NUM_TO_STR_MAP - (not `no_mangle`).
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::Player - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::PieceType - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::SidePieceType - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_platform.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_rust_release_mode.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_is_legal_move.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_get_orig_board.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_update_board_data.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_update_player_data.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_uint_8_list.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::new_uint_8_list.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::free_WireSyncReturnStruct.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::DartPort.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::DartPostCObjectFnType.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::store_dart_post_cobject.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::WireSyncReturnStruct.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_launch_ucci_engine.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::wire_uint_8_list.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::new_uint_8_list.
[2022-06-13T04:28:55Z INFO  cbindgen::bindgen::parser] Take native::Platform - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:28:59Z INFO  lib_flutter_rust_bridge_codegen] Success!
[2022-06-13T04:28:59Z INFO  flutter_rust_bridge_codegen] Now go and use it :)
?[1m# api for connecting ucci engine?[0m
?[1mexport REPO_DIR="$PWD"; cd /; flutter_rust_bridge_codegen  --rust-input "$REPO_DIR/native/src/ucci_api.rs" --rust-output "$REPO_DIR/native/src/gened_ucci_api.rs" --dart-output "$REPO_DIR/lib/gened_ucci_api.dart" --class-name UcciApi --exclude-sync-execution-mode-utility true?[0m
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Picked config: Opts { rust_input_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native/src/ucci_api.rs", dart_output_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/lib/gened_ucci_api.dart", dart_decl_output_path: None, c_output_path: ["C:\\Users\\dbsx\\AppData\\Local\\Temp\\.tmpgHzMSJ.h"], rust_crate_dir: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native", rust_output_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native/src/gened_ucci_api.rs", class_name: "UcciApi", dart_format_line_length: 80, skip_add_mod_to_lib: false, llvm_path: ["/opt/homebrew/opt/llvm", "/usr/local/opt/llvm", "/usr/lib/llvm-9", "/usr/lib/llvm-10", "/usr/lib/llvm-11", "/usr/lib/llvm-12", "/usr/lib/llvm-13", "/usr/lib/llvm-14", "/usr/lib/", "/usr/lib64/", "C:/Program Files/llvm", "C:/Program Files/LLVM", "C:/msys64/mingw64"], llvm_compiler_opts: "", manifest_path: "D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App/native\\Cargo.toml", dart_root: Some("D:/DATA/BaiduSyncdisk/project/personal/chinese_chess/ChineseChess_Muzero_App"), build_runner:
true, exclude_sync_execution_mode_utility: true }
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Phase: Parse source code to AST
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Phase: Parse AST to IR
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Phase: Transform IR
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Phase: Generate Rust code
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Phase: Generate Dart code
[2022-06-13T04:29:01Z INFO  lib_flutter_rust_bridge_codegen] Phase: Other things
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::BOARD_ARRAY - (not `no_mangle`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::PLAYER - (not `no_mangle`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::ORIG_BOARD_ARRAY - (Unsupported expression. Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 })
}), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs:
[], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma,
Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit:
Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 20 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 19 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 18 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 17 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 16 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 17 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 18 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 19 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 20 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit:
Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt
{ token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 21 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 })
}), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 21 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0
}) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma,
Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 22 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt
{ token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0
}) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token:
0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }),
Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 14 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 13 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 13 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token:
0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit {
attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit
{ attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 12 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 11 }) }), Comma, Lit(ExprLit { attrs: [],
lit: Int(LitInt { token: 10 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 9 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 8 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 9 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 10 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 11 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 12 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma,
Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit:
Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt {
token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt
{ token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma, Lit(ExprLit { attrs: [], lit: Int(LitInt { token: 0 }) }), Comma] }))
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::CC_KING_DELTA - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::CC_ADVISOR_DELTA - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::CC_BISHOP_DELTA - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::CC_BISHOP_EYE_DELTA - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::ccKnightDelta - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::ccKnightFootDelta - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::BOARD_LEFT_UP_POS - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::BOARD_RIGHT_DOWN_POS - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::FORT_MATRIX - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::IN_BOARD_MATRIX - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::ROW_NUM_TO_STR_MAP - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::ROW_NUM_TO_STR_MAP - (not `no_mangle`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::COL_NUM_TO_STR_MAP - (not `pub`).
[2022-06-13T04:29:02Z WARN  cbindgen::bindgen::parser] Skip native::COL_NUM_TO_STR_MAP - (not `no_mangle`).
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::Player - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::PieceType - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::SidePieceType - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_platform.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_rust_release_mode.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_is_legal_move.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_get_orig_board.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_update_board_data.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_update_player_data.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_uint_8_list.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::new_uint_8_list.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::free_WireSyncReturnStruct.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_launch_ucci_engine.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::wire_uint_8_list.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::new_uint_8_list.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::DartPort.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::DartPostCObjectFnType.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::store_dart_post_cobject.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::WireSyncReturnStruct.
[2022-06-13T04:29:02Z INFO  cbindgen::bindgen::parser] Take native::Platform - opaque (Enum is not marked with a valid #[repr(prim)] or #[repr(C)].).
[2022-06-13T04:29:06Z INFO  lib_flutter_rust_bridge_codegen] Success!
[2022-06-13T04:29:06Z INFO  flutter_rust_bridge_codegen] Now go and use it :)
?[1m# Uncomment this line to invoke build_runner as well?[0m
?[1mflutter pub get?[0m
Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
Running "flutter pub get" in ChineseChess_Muzero_App...          2,759ms
flutter pub run build_runner build --delete-conflicting-outputs
Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
[INFO] Generating build script...
[INFO] Generating build script completed, took 578ms

[INFO] Precompiling build script......
[INFO] Precompiling build script... completed, took 9.1s

[INFO] Initializing inputs
[INFO] Building new asset graph...
[INFO] Building new asset graph completed, took 981ms

[INFO] Checking for unexpected pre-existing outputs....
[INFO] Checking for unexpected pre-existing outputs. completed, took 1ms

[INFO] Running build...
[INFO] Generating SDK summary...
[INFO] 4.4s elapsed, 0/16 actions completed.
[INFO] Generating SDK summary completed, took 4.4s

[INFO] Running build completed, took 4.8s

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 47ms

[INFO] Succeeded after 4.9s with 0 outputs (22 actions)


### To Reproduce

On win10, using at least 2 rust modules, in each one, define an api with `String` as input parameter, Run `just` with the justfile I stated above, rust `flutter run` choosing windows.

### Expected behavior

There should be no error after running `flutter run`.

### Generated binding code

_No response_

### OS

win10

### Version of `flutter_rust_bridge_codegen`

1.34.2

### Flutter info

_No response_

### Version of `clang++`

14

### Version of `ffigen`

5.0.1

### Additional context

This bug should also be  reproduced in either platform except for windows.
@dbsxdbsx dbsxdbsx added the bug Something isn't working label Jun 13, 2022
@fzyzcjy
Copy link
Owner

fzyzcjy commented Jun 13, 2022

Well I realized a underlying problem: If you execute codegen twice like that, it will generate two files that do not know each other, so common utility will be duplicated. The biggest problem is that, if you have a struct that is used in both files, you will see two same-name but different classes generated and they cannot be interchanged.

Thus, I suggest to make a PR to fully solve this problem: Parse multiple files, instead of just one api.rs, into internal format (IR).

@dbsxdbsx
Copy link
Contributor Author

@fzyzcjy
At present, I don't know the inner logic of frb, So I get no idea on Parse multiple files, instead of just one api.rs, into internal format (IR).
As far as I know, frb has 3 parts--- one for generating rust code(the rust crate), one for generating dart code(the dart module), and another is a tool to bridge the former 2 called flutter_rust_bridge_codegen,
If the logic needs to be changed as you said, which part(s) or even which file need to be modified?

@fzyzcjy
Copy link
Owner

fzyzcjy commented Jun 13, 2022

It has multiple parts:

  • rust parser: given api.rs, it uses syn to see its structures, and convert it to IR (internal representation)
  • rust generator: generate bridge_generated.rs from IR
  • dart generator: generate .dart from IR

@fzyzcjy
Copy link
Owner

fzyzcjy commented Jun 13, 2022

If the logic needs to be changed as you said, which part(s) or even which file need to be modified?

Mainly the parser. https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/frb_codegen/src/parser/ .

You may or may not need to change a bit of the glue https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/frb_codegen/src/lib.rs, I guess.

@dbsxdbsx
Copy link
Contributor Author

Well I realized a underlying problem: If you execute codegen twice like that, it will generate two files that do not know each other, so common utility will be duplicated. The biggest problem is that, if you have a struct that is used in both files, you will see two same-name but different classes generated and they cannot be interchanged.

Thus, I suggest to make a PR to fully solve this problem: Parse multiple files, instead of just one api.rs, into internal format (IR).

Where to put this shared structure? In another file?

@fzyzcjy
Copy link
Owner

fzyzcjy commented Jun 13, 2022

If you decide to output multiple .dart files, maybe need to be in another file.

If only output one .dart file - thus no need to modify the generator at all - then no worries about this problem.

@dbsxdbsx
Copy link
Contributor Author

dbsxdbsx commented Jun 15, 2022

@fzyzcjy, I made a pr, which doesn't solve this issue. but is the key step to solve this issue.

@dbsxdbsx
Copy link
Contributor Author

dbsxdbsx commented Jul 7, 2022

Now, this issue is solved. Related doc: http://cjycode.com/flutter_rust_bridge/feature/multiple_files.html.

@dbsxdbsx dbsxdbsx closed this as completed Jul 7, 2022
@github-actions
Copy link
Contributor

This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new issue.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jul 21, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants