Miscellaneous features
Separate generated definitions from implementations
The generated bridge_generated.dart by default contains definitions of the APIs as well as the implementations. With the flag --dart-decl-output, the two can be separated, and the definitions will not contain anything like dart:ffi.
A command example as follow:
flutter_rust_bridge_codegen .. --dart-decl-output <DECL>
where DECL is the path to the common class/function declarations file.
For example, if you emit your Dart bridge to lib/bridge_generated.dart,
you can put the declarations file at lib/bridge_definitions.dart
By default this will create new file:
├── lib
│   ├── bridge_definitions.dart
More information: #298.
Logging for developers
For developers who want to contribute to this project, here is the feature logging that needs to mention.
When the code in frb_codegen is modified, usually developers want to build and run it locally for testing. Now with the init_logger in logs.rs from frb_codegen, it is easy to do so.  Take frb_example/pure_dart as an example, in ./rust/build.rs, with:
use lib_flutter_rust_bridge_codegen::init_logger;
fn main() {
    init_logger("./logs/").unwrap();
...
}
Then, all information from standard panic, log::info!(), log::debug()!...  of frb_codegen would be recorded to  ./logs/ with a file name of date, like 2023-02-01.log in frb_example/pure_dart/rust as long as the example is built through build.rs. Note, the data from the same day would be appended to the same file.
Moreover, if rust-analyzer is used, then whenever frb_codegen is modified, all examples with build.rs would be automatically triggered to rebuild. Then the log would be updated automatically to disk, which makes the whole developing routine easier.