Cannot generate api method with enum, need help
rfaeseke opened this issue · comments
Describe the bug
When I generate a simple project (flutter_rust_bridge_codegen create example1) and change the return type of the example method to some custom enum (both in simple.rs) then the call "flutter_rust_bridge_codegen generate" shows output like
[0.5s] Parse
└── [0.4s] Run cargo expand
└── [0.1s] Parse source graph
[0.0s] Generate
[0.0s] Polish Error: MissingDep: Please add freezed to your dev_dependencies. (version >=1.0.0)
and the generated simple.dart looks (wrong formatted) like
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'package:freezed_annotation/freezed_annotation.dart' hide protected;
part 'simple.freezed.dart';
ExampleEnum greet({required String name , dynamic hint}) => RustLib.instance.api.greet(name: name, hint: hint);
@freezed
sealed class ExampleEnum with _$ExampleEnum {
const factory ExampleEnum.a( String field0,) = ExampleEnum_A;
const factory ExampleEnum.b( String field0,) = ExampleEnum_B;
}
What went wrong?
Steps to reproduce
-
cargo install 'flutter_rust_bridge_codegen@^2.0.0-dev.24' --force
-
flutter_rust_bridge_codegen create example1
-
simple.rs edited to / looks like
#[flutter_rust_bridge::frb(sync)] // Synchronous mode for simplicity of the demo
pub fn greet(name: String) -> ExampleEnum {
ExampleEnum::A(format!("Hello, {name}!"))
}
// comment: the init_app() function seems to be added by generator?
#[flutter_rust_bridge::frb(init)]
pub fn init_app() {
// Default utilities - feel free to customize
flutter_rust_bridge::setup_default_user_utils();
}
pub enum ExampleEnum {
A(String),
B(String)
}
- flutter_rust_bridge_codegen generate
Logs
[2024-02-21T20:27:21.178Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/main.rs:24] cli=Cli { verbose: false, command: Generate(GenerateCommandArgs { watch: false, primary: GenerateCommandArgsPrimary { config_file: None, rust_input: None, dart_output: None, c_output: None, duplicated_c_output: None, rust_root: None, rust_output: None, dart_entrypoint_class_name: None, dart_format_line_length: None, no_dart_enums_style: false, no_add_mod_to_lib: false, llvm_path: None, llvm_compiler_opts: None, dart_root: None, no_build_runner: false, extra_headers: None, no_web: false, no_deps_check: false, default_external_library_loader_web_prefix: None, no_dart3: false, full_dep: false, local: false, dump: None, dump_all: false } }) }
[2024-02-21T20:27:21.179Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/binary/commands_parser.rs:8] compute_codegen_config: mode=from_files_auto
[2024-02-21T20:27:21.179Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/config/config_parser.rs:43] Found config file flutter_rust_bridge.yaml
[2024-02-21T20:27:21.180Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/mod.rs:25] config=Config { base_dir: Some(""), rust_input: "rust/src/api/**/*.rs", dart_output: "lib/src/rust", c_output: None, duplicated_c_output: None, rust_root: None, rust_output: None, dart_entrypoint_class_name: None, dart_format_line_length: None, dart_enums_style: None, add_mod_to_lib: None, llvm_path: None, llvm_compiler_opts: None, dart_root: None, build_runner: None, extra_headers: None, web: None, deps_check: None, dart3: None, full_dep: None, local: None, default_external_library_loader_web_prefix: None, dump: None, dump_all: None } meta_config=MetaConfig { watch: false }
[2024-02-21T20:27:21.181Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/config/internal_config_parser.rs:42] InternalConfig.parse base_dir="/Users/ron/dev/mobile/workspace/flutter/example1"
[2024-02-21T20:27:21.338Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/mod.rs:28] internal_config=InternalConfig { controller: ControllerInternalConfig { watch: false, watching_paths: ["/Users/ron/dev/mobile/workspace/flutter/example1/rust/src"], exclude_paths: ["/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.io.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.web.rs"], max_count: None }, preparer: PreparerInternalConfig { dart_root: "/Users/ron/dev/mobile/workspace/flutter/example1", deps_check: true, needs_ffigen: false }, parser: ParserInternalConfig { rust_input_path_pack: RustInputPathPack { rust_input_paths: ["/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/simple.rs"] }, rust_crate_dir: "/Users/ron/dev/mobile/workspace/flutter/example1/rust", force_codec_mode_pack: Some(CodecModePack { dart2rust: Pde, rust2dart: Pde }), default_rust_opaque_codec: Moi }, generator: GeneratorInternalConfig { api_dart: GeneratorApiDartInternalConfig { dart_enums_style: true, dart3: true, dart_decl_base_output_path: "/Users/ron/dev/mobile/workspace/flutter/example1/lib/src/rust", dart_entrypoint_class_name: "RustLib" }, wire: GeneratorWireInternalConfig { dart: GeneratorWireDartInternalConfig { has_ffigen: false, web_enabled: true, 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:/msys64/mingw64"], llvm_compiler_opts: "", dart_root: "/Users/ron/dev/mobile/workspace/flutter/example1", extra_headers: "", dart_impl_output_path: TargetOrCommonMap { common: "/Users/ron/dev/mobile/workspace/flutter/example1/lib/src/rust/frb_generated.dart", io: "/Users/ron/dev/mobile/workspace/flutter/example1/lib/src/rust/frb_generated.io.dart", web: "/Users/ron/dev/mobile/workspace/flutter/example1/lib/src/rust/frb_generated.web.dart" }, dart_output_class_name_pack: DartOutputClassNamePack { entrypoint_class_name: "RustLib", api_class_name: "RustLibApi", api_impl_class_name: "RustLibApiImpl", api_impl_platform_class_name: "RustLibApiImplPlatform", wire_class_name: "RustLibWire", wasm_module_name: "RustLibWasmModule" }, default_external_library_loader: GeneratorWireDartDefaultExternalLibraryLoaderInternalConfig { stem: "rust_lib_example1", io_directory: "rust/target/release/", web_prefix: "pkg/" }, c_symbol_prefix: "frbgen_example1_" }, rust: GeneratorWireRustInternalConfig { rust_input_path_pack: RustInputPathPack { rust_input_paths: ["/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/simple.rs"] }, rust_crate_dir: "/Users/ron/dev/mobile/workspace/flutter/example1/rust", web_enabled: true, rust_output_path: TargetOrCommonMap { common: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", io: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.io.rs", web: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.web.rs" }, c_symbol_prefix: "frbgen_example1_", has_ffigen: false, default_stream_sink_codec: Sse, default_rust_opaque_codec: Moi }, c: GeneratorWireCInternalConfig { enable: false, rust_crate_dir: "/Users/ron/dev/mobile/workspace/flutter/example1/rust", rust_output_path: TargetOrCommonMap { common: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", io: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.io.rs", web: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.web.rs" }, c_output_path: None, c_symbol_prefix: "frbgen_example1_" } } }, polisher: PolisherInternalConfig { duplicated_c_output_path: [], dart_format_line_length: 80, add_mod_to_lib: true, build_runner: true, web_enabled: true, dart_root: "/Users/ron/dev/mobile/workspace/flutter/example1", rust_crate_dir: "/Users/ron/dev/mobile/workspace/flutter/example1/rust", rust_output_path: TargetOrCommonMap { common: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", io: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.io.rs", web: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.web.rs" }, c_output_path: None, enable_auto_upgrade: true }, dumper: DumperInternalConfig { dump_contents: [], dump_directory: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/target/frb_dump" } }
[2024-02-21T20:27:21.339Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/utils/dart_repository/dart_repo.rs:22] Guessing toolchain the runner is run into
[2024-02-21T20:27:21.339Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/command_runner.rs:109] execute command: bin=sh args="-c \"flutter\" \"--version\"" current_dir=None cmd="sh" "-c" "\"flutter\" \"--version\""
[2024-02-21T20:27:21.497Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/command_runner.rs:120] command="sh" "-c" "\"flutter\" \"--version\"" stdout=Flutter 3.16.8 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 67457e669f (vor 5 Wochen) • 2024-01-16 16:22:29 -0800
Engine • revision 6e2ea58a5c
Tools • Dart 3.2.5 • DevTools 2.28.5
stderr=
[2024-02-21T20:27:21.497Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/reader.rs:22] read_rust_file rust_file_path="/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/simple.rs" module=Some("api::simple")
[2024-02-21T20:27:21.497Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/cargo_expand.rs:27] CachedCargoExpand execute manifest_dir= rust_crate_dir="/Users/ron/dev/mobile/workspace/flutter/example1/rust"
[2024-02-21T20:27:21.498Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/cargo_expand.rs:90] Running cargo expand in '"/Users/ron/dev/mobile/workspace/flutter/example1/rust"'
[2024-02-21T20:27:21.498Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/command_runner.rs:109] execute command: bin=cargo args="expand --lib --theme=none --ugly" current_dir=Some("/Users/ron/dev/mobile/workspace/flutter/example1/rust") cmd=cd "/Users/ron/dev/mobile/workspace/flutter/example1/rust" && "cargo" "expand" "--lib" "--theme=none" "--ugly"
[2024-02-21T20:27:21.879Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/command_runner.rs:120] command=cd "/Users/ron/dev/mobile/workspace/flutter/example1/rust" && "cargo" "expand" "--lib" "--theme=none" "--ugly" stdout=#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
pub mod api {
/* AUTO INJECTED BY flutter_rust_bridge. This line may not be accurate, and you can change it according to your needs. */
pub mod simple {
/// frb_marker: #[frb(sync)]
pub fn greet(name: String) -> ExampleEnum {
ExampleEnum::A({
let res =
::alloc::fmt::format(format_args!("Hello, {0}!", name));
res
})
}
pub enum ExampleEnum { A(String), B(String), }
}
}
mod frb_generated {
#![allow(non_camel_case_types, unused, non_snake_case,
clippy::needless_return, clippy::redundant_closure_call,
clippy::redundant_closure, clippy::useless_conversion, clippy::unit_arg,
clippy::unused_unit, clippy::double_parens, clippy::let_and_return,
clippy::too_many_arguments, clippy::match_single_binding)]
use flutter_rust_bridge::for_generated::byteorder::{
NativeEndian, ReadBytesExt, WriteBytesExt,
};
use flutter_rust_bridge::for_generated::transform_result_dco;
use flutter_rust_bridge::{Handler, IntoIntoDart};
use std::collections::HashMap;
use std::marker::PhantomData;
use std::sync::Arc;
pub struct MoiArc<T: ?Sized + MoiArcValue> {
object_id: Option<ObjectId>,
value: Option<Arc<T>>,
_phantom: PhantomData<T>,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug + ?Sized + MoiArcValue> ::core::fmt::Debug for
MoiArc<T> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "MoiArc",
"object_id", &self.object_id, "value", &self.value,
"_phantom", &&self._phantom)
}
}
impl<T: ?Sized + MoiArcValue> Drop for MoiArc<T> {
fn drop(&mut self) {
if let Some(object_id) = self.object_id {
Self::decrement_strong_count(object_id);
}
}
}
impl<T: ?Sized + MoiArcValue> AsRef<T> for MoiArc<T> {
fn as_ref(&self) -> &T { self.value.as_ref().unwrap().as_ref() }
}
impl<T: ?Sized + MoiArcValue>
::flutter_rust_bridge::for_generated::BaseArc<T> for MoiArc<T> {
fn new(value: T) -> Self where T: Sized {
let mut pool = T::get_pool().write().unwrap();
let object_id = pool.id_generator.next_id();
let value = Arc::new(value);
let old_value =
pool.map.insert(object_id,
MoiArcPoolValue { ref_count: 1, value: value.clone() });
if !old_value.is_none() {
::core::panicking::panic("assertion failed: old_value.is_none()")
};
Self {
object_id: Some(object_id),
value: Some(value),
_phantom: PhantomData,
}
}
fn try_unwrap(mut self) -> Result<T, Self> where T: Sized {
let pool = &mut T::get_pool().write().unwrap();
if pool.map.get(&self.object_id.unwrap()).unwrap().ref_count == 1
{
Self::decrement_strong_count_raw(self.object_id.unwrap(),
pool);
self.object_id.take().unwrap();
Ok(Arc::into_inner(self.value.take().unwrap()).unwrap())
} else { Err(self) }
}
fn into_inner(self) -> Option<T> where T: Sized {
self.try_unwrap().ok()
}
fn into_raw(mut self) -> usize { self.object_id.take().unwrap() }
}
impl<T: ?Sized + MoiArcValue> Clone for MoiArc<T> {
fn clone(&self) -> Self {
Self::increment_strong_count(self.object_id.unwrap());
Self {
object_id: self.object_id,
value: self.value.clone(),
_phantom: PhantomData,
}
}
}
impl<T: ?Sized + MoiArcValue> MoiArc<T> {
pub(crate) fn from_raw(raw: usize) -> Self where T: Sized {
let map = &T::get_pool().read().unwrap().map;
Self {
object_id: Some(raw),
value: Some(map.get(&raw).unwrap().value.clone()),
_phantom: PhantomData,
}
}
pub fn increment_strong_count(raw: usize) {
let map = &mut T::get_pool().write().unwrap().map;
map.get_mut(&raw).unwrap().ref_count += 1;
}
pub fn decrement_strong_count(raw: usize) {
Self::decrement_strong_count_raw(raw,
&mut T::get_pool().write().unwrap())
}
fn decrement_strong_count_raw(raw: usize,
pool: &mut MoiArcPoolInner<T>) {
let value = pool.map.get_mut(&raw).unwrap();
value.ref_count -= 1;
if value.ref_count == 0 { pool.map.remove(&raw).unwrap(); }
}
}
pub trait MoiArcValue: 'static {
fn get_pool()
-> &'static MoiArcPool<Self>;
}
type ObjectId = usize;
pub type MoiArcPool<T> = std::sync::RwLock<MoiArcPoolInner<T>>;
pub struct MoiArcPoolInner<T: ?Sized> {
map: HashMap<ObjectId, MoiArcPoolValue<T>>,
id_generator: IdGenerator,
}
impl<T: ?Sized> Default for MoiArcPoolInner<T> {
fn default() -> Self {
Self { map: HashMap::new(), id_generator: Default::default() }
}
}
struct IdGenerator {
next_id: ObjectId,
}
impl Default for IdGenerator {
fn default() -> Self { Self { next_id: Self::MIN_ID } }
}
impl IdGenerator {
const MIN_ID: ObjectId = 1;
const MAX_ID: ObjectId = 2147483600;
fn next_id(&mut self) -> ObjectId {
let ans = self.next_id;
self.next_id =
if self.next_id >= Self::MAX_ID {
Self::MIN_ID
} else { self.next_id + 1 };
ans
}
}
impl<T: ?Sized> MoiArcPoolInner<T> {}
struct MoiArcPoolValue<T: ?Sized> {
ref_count: i32,
value: Arc<T>,
}
use ::flutter_rust_bridge::for_generated::decode_rust_opaque_nom;
fn decode_rust_opaque_moi<T: MoiArcValue + Send + Sync>(ptr: usize)
-> RustOpaqueMoi<T> {
RustOpaqueMoi::from_arc(MoiArc::<T>::from_raw(ptr))
}
use ::flutter_rust_bridge::for_generated::StdArc;
use ::flutter_rust_bridge::RustOpaqueNom;
/// Please refer to `RustOpaque` for doc.
pub type RustOpaqueMoi<T> =
::flutter_rust_bridge::for_generated::RustOpaqueBase<T, MoiArc<T>>;
/// A wrapper to support [arbitrary Rust types](https://cjycode.com/flutter_rust_bridge/guides/types/arbitrary).
pub type RustOpaque<T> = RustOpaqueMoi<T>;
use ::flutter_rust_bridge::RustAutoOpaqueNom;
/// Please refer to `RustAutoOpaque` for doc.
pub type RustAutoOpaqueMoi<T> =
::flutter_rust_bridge::for_generated::RustAutoOpaqueBase<T,
MoiArc<::flutter_rust_bridge::for_generated::rust_async::RwLock<T>>>;
/// Usually this is unneeded, and just write down arbitrary types.
/// However, when you need arbitrary types at places that are not supported yet,
/// use `RustOpaqueOpaque<YourArbitraryType>`.
pub type RustAutoOpaque<T> = RustAutoOpaqueMoi<T>;
pub trait CstDecode<T> {
fn cst_decode(self)
-> T;
}
impl<T, S> CstDecode<Option<T>> for *mut S where *mut S: CstDecode<T> {
fn cst_decode(self) -> Option<T> {
(!self.is_null()).then(|| self.cst_decode())
}
}
pub trait SseDecode {
fn sse_decode(deserializer:
&mut ::flutter_rust_bridge::for_generated::SseDeserializer)
-> Self;
fn sse_decode_single(message:
::flutter_rust_bridge::for_generated::Dart2RustMessageSse)
-> Self where Self: Sized {
let mut deserializer =
::flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let ans = Self::sse_decode(&mut deserializer);
deserializer.end();
ans
}
}
pub trait SseEncode {
fn sse_encode(self,
serializer: &mut ::flutter_rust_bridge::for_generated::SseSerializer);
}
fn transform_result_sse<T, E>(raw: Result<T, E>)
->
Result<::flutter_rust_bridge::for_generated::Rust2DartMessageSse,
::flutter_rust_bridge::for_generated::Rust2DartMessageSse> where
T: SseEncode, E: SseEncode {
use ::flutter_rust_bridge::for_generated::{Rust2DartAction, SseCodec};
match raw {
Ok(raw) =>
Ok(SseCodec::encode(Rust2DartAction::Success,
|serializer| { raw.sse_encode(serializer) })),
Err(raw) =>
Err(SseCodec::encode(Rust2DartAction::Error,
|serializer| { raw.sse_encode(serializer) })),
}
}
pub struct StreamSink<T,
Rust2DartCodec: ::flutter_rust_bridge::for_generated::BaseCodec =
::flutter_rust_bridge::for_generated::SseCodec> {
base: ::flutter_rust_bridge::for_generated::StreamSinkBase<T,
Rust2DartCodec>,
}
#[automatically_derived]
impl<T: ::core::clone::Clone, Rust2DartCodec: ::core::clone::Clone +
::flutter_rust_bridge::for_generated::BaseCodec> ::core::clone::Clone
for StreamSink<T, Rust2DartCodec> {
#[inline]
fn clone(&self) -> StreamSink<T, Rust2DartCodec> {
StreamSink { base: ::core::clone::Clone::clone(&self.base) }
}
}
impl<T, Rust2DartCodec: ::flutter_rust_bridge::for_generated::BaseCodec>
StreamSink<T, Rust2DartCodec> {
pub fn new(base:
::flutter_rust_bridge::for_generated::StreamSinkBase<T,
Rust2DartCodec>) -> Self {
Self { base }
}
}
impl<T> StreamSink<T, ::flutter_rust_bridge::for_generated::DcoCodec> {
pub fn add<T2>(&self, value: T)
-> Result<(), ::flutter_rust_bridge::Rust2DartSendError> where
T: ::flutter_rust_bridge::IntoIntoDart<T2>,
T2: ::flutter_rust_bridge::IntoDart {
self.base.add(::flutter_rust_bridge::for_generated::DcoCodec::encode(::flutter_rust_bridge::for_generated::Rust2DartAction::Success,
value.into_into_dart()))
}
}
impl<T> StreamSink<T, ::flutter_rust_bridge::for_generated::SseCodec>
where T: SseEncode {
pub fn add(&self, value: T)
-> Result<(), ::flutter_rust_bridge::Rust2DartSendError> {
self.base.add(::flutter_rust_bridge::for_generated::SseCodec::encode(::flutter_rust_bridge::for_generated::Rust2DartAction::Success,
|serializer| value.sse_encode(serializer)))
}
}
const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.0.0-dev.24";
#[allow(missing_copy_implementations)]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub struct FLUTTER_RUST_BRIDGE_HANDLER {
__private_field: (),
}
#[doc(hidden)]
pub static FLUTTER_RUST_BRIDGE_HANDLER: FLUTTER_RUST_BRIDGE_HANDLER =
FLUTTER_RUST_BRIDGE_HANDLER { __private_field: () };
impl ::lazy_static::__Deref for FLUTTER_RUST_BRIDGE_HANDLER {
type Target =
::flutter_rust_bridge::DefaultHandler<::flutter_rust_bridge::for_generated::SimpleThreadPool>;
fn deref(&self)
->
&::flutter_rust_bridge::DefaultHandler<::flutter_rust_bridge::for_generated::SimpleThreadPool> {
#[inline(always)]
fn __static_ref_initialize()
->
::flutter_rust_bridge::DefaultHandler<::flutter_rust_bridge::for_generated::SimpleThreadPool> {
{
match (&FLUTTER_RUST_BRIDGE_CODEGEN_VERSION,
&flutter_rust_bridge::for_generated::FLUTTER_RUST_BRIDGE_RUNTIME_VERSION)
{
(left_val, right_val) => {
if !(*left_val == *right_val) {
let kind = ::core::panicking::AssertKind::Eq;
::core::panicking::assert_failed(kind, &*left_val,
&*right_val,
::core::option::Option::Some(format_args!("Please ensure flutter_rust_bridge\'s codegen ({0}) and runtime ({1}) versions are the same",
FLUTTER_RUST_BRIDGE_CODEGEN_VERSION,
flutter_rust_bridge::for_generated::FLUTTER_RUST_BRIDGE_RUNTIME_VERSION)));
}
}
};
::flutter_rust_bridge::DefaultHandler::new_simple(Default::default())
}
}
#[inline(always)]
fn __stability()
->
&'static ::flutter_rust_bridge::DefaultHandler<::flutter_rust_bridge::for_generated::SimpleThreadPool> {
static LAZY:
::lazy_static::lazy::Lazy<::flutter_rust_bridge::DefaultHandler<::flutter_rust_bridge::for_generated::SimpleThreadPool>>
=
::lazy_static::lazy::Lazy::INIT;
LAZY.get(__static_ref_initialize)
}
__stability()
}
}
impl ::lazy_static::LazyStatic for FLUTTER_RUST_BRIDGE_HANDLER {
fn initialize(lazy: &Self) { let _ = &**lazy; }
}
fn wire_greet_impl(ptr_:
flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32, data_len_: i32)
-> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::<flutter_rust_bridge::for_generated::SseCodec,
_>(flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "greet",
port: None,
mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync,
},
move ||
{
let message =
unsafe {
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(ptr_,
rust_vec_len_, data_len_)
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_name = <String>::sse_decode(&mut deserializer);
deserializer.end();
transform_result_sse((move ||
{
Result::<_, ()>::Ok(crate::api::simple::greet(api_name))
})())
})
}
impl SseDecode for String {
fn sse_decode(deserializer:
&mut flutter_rust_bridge::for_generated::SseDeserializer)
-> Self {
let mut inner = <Vec<u8>>::sse_decode(deserializer);
return String::from_utf8(inner).unwrap();
}
}
impl SseDecode for Vec<u8> {
fn sse_decode(deserializer:
&mut flutter_rust_bridge::for_generated::SseDeserializer)
-> Self {
let mut len_ = <i32>::sse_decode(deserializer);
let mut ans_ = ::alloc::vec::Vec::new();
for idx_ in 0..len_ { ans_.push(<u8>::sse_decode(deserializer)); }
return ans_;
}
}
impl SseDecode for u8 {
fn sse_decode(deserializer:
&mut flutter_rust_bridge::for_generated::SseDeserializer)
-> Self {
deserializer.cursor.read_u8().unwrap()
}
}
impl SseDecode for () {
fn sse_decode(deserializer:
&mut flutter_rust_bridge::for_generated::SseDeserializer)
-> Self {}
}
impl SseDecode for i32 {
fn sse_decode(deserializer:
&mut flutter_rust_bridge::for_generated::SseDeserializer)
-> Self {
deserializer.cursor.read_i32::<NativeEndian>().unwrap()
}
}
impl SseDecode for bool {
fn sse_decode(deserializer:
&mut flutter_rust_bridge::for_generated::SseDeserializer)
-> Self {
deserializer.cursor.read_u8().unwrap() != 0
}
}
fn pde_ffi_dispatcher_primary_impl(func_id: i32,
port: flutter_rust_bridge::for_generated::MessagePort,
ptr:
flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len: i32, data_len: i32) {
match func_id {
_ =>
::core::panicking::panic("internal error: entered unreachable code"),
}
}
fn pde_ffi_dispatcher_sync_impl(func_id: i32,
ptr:
flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len: i32, data_len: i32)
-> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
match func_id {
1 => wire_greet_impl(ptr, rust_vec_len, data_len),
_ =>
::core::panicking::panic("internal error: entered unreachable code"),
}
}
impl SseEncode for String {
fn sse_encode(self,
serializer:
&mut flutter_rust_bridge::for_generated::SseSerializer) {
<Vec<u8>>::sse_encode(self.into_bytes(), serializer);
}
}
impl SseEncode for Vec<u8> {
fn sse_encode(self,
serializer:
&mut flutter_rust_bridge::for_generated::SseSerializer) {
<i32>::sse_encode(self.len() as _, serializer);
for item in self { <u8>::sse_encode(item, serializer); }
}
}
impl SseEncode for u8 {
fn sse_encode(self,
serializer:
&mut flutter_rust_bridge::for_generated::SseSerializer) {
serializer.cursor.write_u8(self).unwrap();
}
}
impl SseEncode for () {
fn sse_encode(self,
serializer:
&mut flutter_rust_bridge::for_generated::SseSerializer) {}
}
impl SseEncode for i32 {
fn sse_encode(self,
serializer:
&mut flutter_rust_bridge::for_generated::SseSerializer) {
serializer.cursor.write_i32::<NativeEndian>(self).unwrap();
}
}
impl SseEncode for bool {
fn sse_encode(self,
serializer:
&mut flutter_rust_bridge::for_generated::SseSerializer) {
serializer.cursor.write_u8(self as _).unwrap();
}
}
#[cfg(not(target_family = "wasm"))]
#[path = "frb_generated.io.rs"]
mod io {
use super::*;
use flutter_rust_bridge::for_generated::byteorder::{
NativeEndian, ReadBytesExt, WriteBytesExt,
};
use flutter_rust_bridge::for_generated::transform_result_dco;
use flutter_rust_bridge::{Handler, IntoIntoDart};
pub trait NewWithNullPtr {
fn new_with_null_ptr()
-> Self;
}
impl<T> NewWithNullPtr for *mut T {
fn new_with_null_ptr() -> Self { std::ptr::null_mut() }
}
#[no_mangle]
pub extern "C" fn frb_pde_ffi_dispatcher_primary(func_id: i32,
port_: i64, ptr_: *mut u8, rust_vec_len_: i32, data_len_: i32) {
pde_ffi_dispatcher_primary_impl(func_id, port_, ptr_,
rust_vec_len_, data_len_)
}
#[no_mangle]
pub extern "C" fn frb_pde_ffi_dispatcher_sync(func_id: i32,
ptr_: *mut u8, rust_vec_len_: i32, data_len_: i32)
-> ::flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
pde_ffi_dispatcher_sync_impl(func_id, ptr_, rust_vec_len_,
data_len_)
}
#[no_mangle]
pub extern "C" fn dart_fn_deliver_output(call_id: i32, ptr_: *mut u8,
rust_vec_len_: i32, data_len_: i32) {
let message =
unsafe {
::flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(ptr_,
rust_vec_len_, data_len_)
};
FLUTTER_RUST_BRIDGE_HANDLER.dart_fn_handle_output(call_id,
message)
}
}
#[cfg(not(target_family = "wasm"))]
pub use io::*;
}
stderr= Checking rust_lib_example1 v0.1.0 (/Users/ron/dev/mobile/workspace/flutter/example1/rust)
Finished dev [unoptimized + debuginfo] target(s) in 0.29s
[2024-02-21T20:27:21.884Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/crates.rs:26] parse manifest_path="/Users/ron/dev/mobile/workspace/flutter/example1/rust/Cargo.toml"
[2024-02-21T20:27:22.075Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Public, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib.rs", module_path: ["crate"] }
[2024-02-21T20:27:22.075Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "api"]
[2024-02-21T20:27:22.075Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:202] parse_syn_item_mod_contentless module_path=["crate", "api"]
[2024-02-21T20:27:22.075Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:205] file_path_candidates "api" "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib.rs" ["/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib/api.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib/api/mod.rs"]
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/reader.rs:22] read_rust_file rust_file_path="/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs" module=Some("api")
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/cargo_expand.rs:27] CachedCargoExpand execute manifest_dir= rust_crate_dir="/Users/ron/dev/mobile/workspace/flutter/example1/rust"
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:216] Trying to parse "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs"
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Public, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs", module_path: ["crate", "api"] }
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "api", "simple"]
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:180] parse_syn_item_mod_contentful module_path=["crate", "api", "simple"]
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Public, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs", module_path: ["crate", "api", "simple"] }
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: ExampleEnum, span: bytes(907..918) }
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Public, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs", module_path: ["crate", "api", "simple"] }
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Public, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/api/mod.rs", module_path: ["crate", "api"] }
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "frb_generated"]
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:202] parse_syn_item_mod_contentless module_path=["crate", "frb_generated"]
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:205] file_path_candidates "frb_generated" "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib.rs" ["/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated/mod.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib/frb_generated.rs", "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib/frb_generated/mod.rs"]
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/reader.rs:22] read_rust_file rust_file_path="/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs" module=Some("frb_generated")
[2024-02-21T20:27:22.076Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/commands/cargo_expand.rs:27] CachedCargoExpand execute manifest_dir= rust_crate_dir="/Users/ron/dev/mobile/workspace/flutter/example1/rust"
[2024-02-21T20:27:22.077Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:216] Trying to parse "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs"
[2024-02-21T20:27:22.078Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Inherited, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated"] }
[2024-02-21T20:27:22.078Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MoiArc, span: bytes(1626..1632) }
[2024-02-21T20:27:22.078Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:124] parse_syn_item_struct_or_enum item_type=ItemType { attrs: [], vis: Visibility::Inherited, type_token: Type, ident: Ident { sym: ObjectId, span: bytes(5452..5460) }, generics: Generics { lt_token: None, params: [], gt_token: None, where_clause: None }, eq_token: Eq, ty: Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: usize, span: bytes(5463..5468) }, arguments: PathArguments::None }] } }, semi_token: Semi }
[2024-02-21T20:27:22.078Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:124] parse_syn_item_struct_or_enum item_type=ItemType { attrs: [], vis: Visibility::Public(Pub), type_token: Type, ident: Ident { sym: MoiArcPool, span: bytes(5483..5493) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(5494..5495) }, colon_token: None, bounds: [], eq_token: None, default: None })], gt_token: Some(Gt), where_clause: None }, eq_token: Eq, ty: Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: std, span: bytes(5499..5502) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: sync, span: bytes(5504..5508) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RwLock, span: bytes(5510..5516) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: MoiArcPoolInner, span: bytes(5517..5532) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(5533..5534) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-02-21T20:27:22.078Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MoiArcPoolInner, span: bytes(5553..5568) }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: IdGenerator, span: bytes(5861..5872) }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MoiArcPoolValue, span: bytes(6445..6460) }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:124] parse_syn_item_struct_or_enum item_type=ItemType { attrs: [Attribute { pound_token: Pound, style: AttrStyle::Outer, bracket_token: Bracket, meta: Meta::NameValue { path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: doc, span: bytes(6869..6910) }, arguments: PathArguments::None }] }, eq_token: Eq, value: Expr::Lit { attrs: [], lit: Lit::Str { token: " Please refer to `RustOpaque` for doc." } } } }], vis: Visibility::Public(Pub), type_token: Type, ident: Ident { sym: RustOpaqueMoi, span: bytes(6924..6937) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(6938..6939) }, colon_token: None, bounds: [], eq_token: None, default: None })], gt_token: Some(Gt), where_clause: None }, eq_token: Eq, ty: Type::Path { qself: None, path: Path { leading_colon: Some(PathSep), segments: [PathSegment { ident: Ident { sym: flutter_rust_bridge, span: bytes(6953..6972) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: for_generated, span: bytes(6974..6987) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RustOpaqueBase, span: bytes(6989..7003) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(7004..7005) }, arguments: PathArguments::None }] } }), Comma, GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: MoiArc, span: bytes(7007..7013) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(7014..7015) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:124] parse_syn_item_struct_or_enum item_type=ItemType { attrs: [Attribute { pound_token: Pound, style: AttrStyle::Outer, bracket_token: Bracket, meta: Meta::NameValue { path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: doc, span: bytes(7023..7135) }, arguments: PathArguments::None }] }, eq_token: Eq, value: Expr::Lit { attrs: [], lit: Lit::Str { token: " A wrapper to support [arbitrary Rust types](https://cjycode.com/flutter_rust_bridge/guides/types/arbitrary)." } } } }], vis: Visibility::Public(Pub), type_token: Type, ident: Ident { sym: RustOpaque, span: bytes(7149..7159) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(7160..7161) }, colon_token: None, bounds: [], eq_token: None, default: None })], gt_token: Some(Gt), where_clause: None }, eq_token: Eq, ty: Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: RustOpaqueMoi, span: bytes(7165..7178) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(7179..7180) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:124] parse_syn_item_struct_or_enum item_type=ItemType { attrs: [Attribute { pound_token: Pound, style: AttrStyle::Outer, bracket_token: Bracket, meta: Meta::NameValue { path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: doc, span: bytes(7237..7282) }, arguments: PathArguments::None }] }, eq_token: Eq, value: Expr::Lit { attrs: [], lit: Lit::Str { token: " Please refer to `RustAutoOpaque` for doc." } } } }], vis: Visibility::Public(Pub), type_token: Type, ident: Ident { sym: RustAutoOpaqueMoi, span: bytes(7296..7313) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(7314..7315) }, colon_token: None, bounds: [], eq_token: None, default: None })], gt_token: Some(Gt), where_clause: None }, eq_token: Eq, ty: Type::Path { qself: None, path: Path { leading_colon: Some(PathSep), segments: [PathSegment { ident: Ident { sym: flutter_rust_bridge, span: bytes(7329..7348) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: for_generated, span: bytes(7350..7363) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RustAutoOpaqueBase, span: bytes(7365..7383) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(7384..7385) }, arguments: PathArguments::None }] } }), Comma, GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: MoiArc, span: bytes(7395..7401) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: Some(PathSep), segments: [PathSegment { ident: Ident { sym: flutter_rust_bridge, span: bytes(7404..7423) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: for_generated, span: bytes(7425..7438) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: rust_async, span: bytes(7440..7450) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RwLock, span: bytes(7452..7458) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(7459..7460) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:124] parse_syn_item_struct_or_enum item_type=ItemType { attrs: [Attribute { pound_token: Pound, style: AttrStyle::Outer, bracket_token: Bracket, meta: Meta::NameValue { path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: doc, span: bytes(7469..7535) }, arguments: PathArguments::None }] }, eq_token: Eq, value: Expr::Lit { attrs: [], lit: Lit::Str { token: " Usually this is unneeded, and just write down arbitrary types." } } } }, Attribute { pound_token: Pound, style: AttrStyle::Outer, bracket_token: Bracket, meta: Meta::NameValue { path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: doc, span: bytes(7540..7620) }, arguments: PathArguments::None }] }, eq_token: Eq, value: Expr::Lit { attrs: [], lit: Lit::Str { token: " However, when you need arbitrary types at places that are not supported yet," } } } }, Attribute { pound_token: Pound, style: AttrStyle::Outer, bracket_token: Bracket, meta: Meta::NameValue { path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: doc, span: bytes(7625..7671) }, arguments: PathArguments::None }] }, eq_token: Eq, value: Expr::Lit { attrs: [], lit: Lit::Str { token: " use `RustOpaqueOpaque<YourArbitraryType>`." } } } }], vis: Visibility::Public(Pub), type_token: Type, ident: Ident { sym: RustAutoOpaque, span: bytes(7685..7699) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(7700..7701) }, colon_token: None, bounds: [], eq_token: None, default: None })], gt_token: Some(Gt), where_clause: None }, eq_token: Eq, ty: Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: RustAutoOpaqueMoi, span: bytes(7705..7722) }, arguments: PathArguments::AngleBracketed { colon2_token: None, lt_token: Lt, args: [GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: T, span: bytes(7723..7724) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: StreamSink, span: bytes(9380..9390) }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: FLUTTER_RUST_BRIDGE_HANDLER, span: bytes(11441..11468) }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "frb_generated", "io"]
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:180] parse_syn_item_mod_contentful module_path=["crate", "frb_generated", "io"]
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Inherited, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated", "io"] }
[2024-02-21T20:27:22.079Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Inherited, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated", "io"] }
[2024-02-21T20:27:22.080Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Inherited, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated"] }
[2024-02-21T20:27:22.080Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Public, file_path: "/Users/ron/dev/mobile/workspace/flutter/example1/rust/src/lib.rs", module_path: ["crate"] }
[2024-02-21T20:27:22.080Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/codegen/parser/function_parser/mod.rs:67] parse_function function name: Ident { sym: greet, span: bytes(37..42) }
[2024-02-21T20:27:22.083Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/utils/dart_repository/dart_repo.rs:22] Guessing toolchain the runner is run into
[2024-02-21T20:27:22.083Z DEBUG /Users/ron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/flutter_rust_bridge_codegen-2.0.0-dev.24/src/library/utils/dart_repository/dart_repo.rs:71] Checking presence of freezed in dev_dependencies at /Users/ron/dev/mobile/workspace/flutter/example1
[0.6s] Parse
└── [0.4s] Run cargo expand
└── [0.2s] Parse source graph
[0.0s] Generate
[0.0s] Polish Error: MissingDep: Please add freezed to your dev_dependencies. (version >=1.0.0)
ron@Rons-MacBook-Pro example1 %
Expected behavior
No response
Generated binding code
No response
OS
MacOS
Version of flutter_rust_bridge_codegen
2.0.0-dev.24
Flutter info
[✓] Flutter (Channel stable, 3.16.8, on macOS 14.0 23A344 darwin-arm64, locale de-DE)
• Flutter version 3.16.8 on channel stable at /Users/ron/dev/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 67457e669f (vor 5 Wochen), 2024-01-16 16:22:29 -0800
• Engine revision 6e2ea58a5c
• Dart version 3.2.5
• DevTools version 2.28.5
[!] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
• Android SDK at /Users/ron/Library/Android/sdk
✗ cmdline-tools component is missing
Run `path/to/sdkmanager --install "cmdline-tools;latest"`
See https://developer.android.com/studio/command-line for more details.
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 15.0.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 15A507
• CocoaPods version 1.14.3
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2021.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
[✓] IntelliJ IDEA Ultimate Edition (version 2023.2.1)
• IntelliJ at /Applications/IntelliJ IDEA.app
• Flutter plugin version 76.3.4
• Dart plugin version 232.9559.10
[✓] VS Code (version 1.73.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension can be installed from:
🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[✓] Connected device (2 available)
• macOS (desktop) • macos • darwin-arm64 • macOS 14.0 23A344 darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 121.0.6167.184
[✓] Network resources
• All expected network resources are available.
Version of clang++
No response
Additional context
No response
Hi! Thanks for opening your first issue here! 😄
MissingDep: Please add freezed to your dev_dependencies. (version >=1.0.0)
Please add freezed
to your pubspec.yaml's dev_dependencies
. Could you please check whether this solves the problem?
Error: MissingDep: Please add freezed_annotation to your dependencies. (version >=1.0.0)
Similarly, please add freezed_annotation to your dependencies
flutter pub add freezed_annotation
flutter_rust_bridge_codegen generate
[0.6s] Parse
└── [0.4s] Run cargo expand
└── [0.2s] Parse source graph
[0.0s] Generate
[0.0s] Polish Error: MissingDep: Please add build_runner to your dev_dependencies. (version >=1.0.0)
Hi, it would be great to firstly follow what the message suggests. For example, here it says:
Please add build_runner to your dev_dependencies.
Now it works. Thank you!
You are welcome!