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

impl ignored for enums #1870

Closed
NightBlaze opened this issue Apr 10, 2024 · 4 comments · Fixed by #1879
Closed

impl ignored for enums #1870

NightBlaze opened this issue Apr 10, 2024 · 4 comments · Fixed by #1879
Labels
bug Something isn't working

Comments

@NightBlaze
Copy link

Describe the bug

It's nice to have access to some impl functions for enums from Dart but flutter_rust_bridge_codegen generate skips impl for enum.

Steps to reproduce

  1. Create a fresh project flutter_rust_bridge_codegen create frb_enum
  2. Add the next snippet to simple.rs
#[derive(Debug)]
pub enum MyEnum {
    Abc
}

impl MyEnum {
    #[flutter_rust_bridge::frb(sync)]
    pub fn foo(&self) -> String {
        format!("{:?}", self)
    }
}
  1. Run flutter_rust_bridge_codegen generate

Output of simple.dart is:

String greet({required String name, dynamic hint}) =>
    RustLib.instance.api.greet(name: name, hint: hint);

enum MyEnum {
  abc,
}

Logs

-> % RUST_LOG=debug flutter_rust_bridge_codegen generate
[2024-04-10T07:32:25.331Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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-04-10T07:32:25.333Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/binary/commands_parser.rs:8] compute_codegen_config: mode=from_files_auto
[2024-04-10T07:32:25.334Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/config/config_parser.rs:45] Found config file flutter_rust_bridge.yaml
[2024-04-10T07:32:25.337Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/mod.rs:24] 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-04-10T07:32:25.337Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/config/internal_config_parser.rs:42] InternalConfig.parse base_dir="/Users/user/Work/frb_enum"
[2024-04-10T07:32:25.857Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/mod.rs:27] internal_config=InternalConfig { controller: ControllerInternalConfig { watch: false, watching_paths: ["/Users/user/Work/frb_enum/rust/src"], exclude_paths: ["/Users/user/Work/frb_enum/rust/src/frb_generated.rs", "/Users/user/Work/frb_enum/rust/src/frb_generated.io.rs", "/Users/user/Work/frb_enum/rust/src/frb_generated.web.rs"], max_count: None }, preparer: PreparerInternalConfig { dart_root: "/Users/user/Work/frb_enum", deps_check: true, needs_ffigen: false }, parser: ParserInternalConfig { rust_input_path_pack: RustInputPathPack { rust_input_paths: ["/Users/user/Work/frb_enum/rust/src/api/simple.rs"] }, rust_crate_dir: "/Users/user/Work/frb_enum/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/user/Work/frb_enum/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/user/Work/frb_enum", extra_headers: "", dart_impl_output_path: TargetOrCommonMap { common: "/Users/user/Work/frb_enum/lib/src/rust/frb_generated.dart", io: "/Users/user/Work/frb_enum/lib/src/rust/frb_generated.io.dart", web: "/Users/user/Work/frb_enum/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_frb_enum", io_directory: "rust/target/release/", web_prefix: "pkg/" }, c_symbol_prefix: "frbgen_frb_enum_" }, rust: GeneratorWireRustInternalConfig { rust_input_path_pack: RustInputPathPack { rust_input_paths: ["/Users/user/Work/frb_enum/rust/src/api/simple.rs"] }, rust_crate_dir: "/Users/user/Work/frb_enum/rust", web_enabled: true, rust_output_path: TargetOrCommonMap { common: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", io: "/Users/user/Work/frb_enum/rust/src/frb_generated.io.rs", web: "/Users/user/Work/frb_enum/rust/src/frb_generated.web.rs" }, c_symbol_prefix: "frbgen_frb_enum_", has_ffigen: false, default_stream_sink_codec: Sse, default_rust_opaque_codec: Moi }, c: GeneratorWireCInternalConfig { enable: false, rust_crate_dir: "/Users/user/Work/frb_enum/rust", rust_output_path: TargetOrCommonMap { common: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", io: "/Users/user/Work/frb_enum/rust/src/frb_generated.io.rs", web: "/Users/user/Work/frb_enum/rust/src/frb_generated.web.rs" }, c_output_path: None, c_symbol_prefix: "frbgen_frb_enum_" } } }, 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/user/Work/frb_enum", rust_crate_dir: "/Users/user/Work/frb_enum/rust", rust_output_path: TargetOrCommonMap { common: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", io: "/Users/user/Work/frb_enum/rust/src/frb_generated.io.rs", web: "/Users/user/Work/frb_enum/rust/src/frb_generated.web.rs" }, c_output_path: None, enable_auto_upgrade: true }, dumper: DumperInternalConfig { dump_contents: [], dump_directory: "/Users/user/Work/frb_enum/rust/target/frb_dump" } }
[2024-04-10T07:32:25.858Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/utils/dart_repository/dart_repo.rs:22] Guessing toolchain the runner is run into
[2024-04-10T07:32:25.862Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:129] execute command: bin=sh args="-c \"flutter\" \"--version\"" current_dir=None cmd="sh" "-c" "\"flutter\" \"--version\""
[2024-04-10T07:32:26.235Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:140] command="sh" "-c" "\"flutter\" \"--version\"" stdout=Flutter 3.19.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 68bfaea224 (3 weeks ago) • 2024-03-20 15:36:31 -0700
Engine • revision a5c24f538d
Tools • Dart 3.3.2 • DevTools 2.31.1
 stderr=
[2024-04-10T07:32:26.237Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/reader.rs:22] read_rust_file rust_file_path="/Users/user/Work/frb_enum/rust/src/api/simple.rs" module=Some("api::simple")
[2024-04-10T07:32:26.237Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/cargo_expand.rs:31] CachedCargoExpand execute manifest_dir= rust_crate_dir="/Users/user/Work/frb_enum/rust"
[2024-04-10T07:32:26.237Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/cargo_expand.rs:117] Running cargo expand in '"/Users/user/Work/frb_enum/rust"'
[2024-04-10T07:32:26.237Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:129] execute command: bin=cargo args="expand --lib --theme=none --ugly" current_dir=Some("/Users/user/Work/frb_enum/rust") cmd=cd "/Users/user/Work/frb_enum/rust" && RUSTFLAGS="--cfg frb_expand" "cargo" "expand" "--lib" "--theme=none" "--ugly"
[2024-04-10T07:32:41.244Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:140] command=cd "/Users/user/Work/frb_enum/rust" && RUSTFLAGS="--cfg frb_expand" "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 {
        #[doc = r###"frb_marker: #[frb(sync)]"###]
        pub fn greet(name: String) -> String {
            {
                let res =
                    ::alloc::fmt::format(format_args!("Hello, {0}!", name));
                res
            }
        }
        #[doc = r###"frb_marker: #[frb(init)]"###]
        pub fn init_app() { flutter_rust_bridge::setup_default_user_utils(); }
        pub enum MyEnum { Abc, }
        #[automatically_derived]
        impl ::core::fmt::Debug for MyEnum {
            #[inline]
            fn fmt(&self, f: &mut ::core::fmt::Formatter)
                -> ::core::fmt::Result {
                ::core::fmt::Formatter::write_str(f, "Abc")
            }
        }
        impl MyEnum {
            #[doc = r###"frb_marker: #[frb(sync)]"###]
            pub fn foo(&self) -> String {
                {
                    let res = ::alloc::fmt::format(format_args!("{0:?}", self));
                    res
                }
            }
        }
    }
}
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};
    #[doc(hidden)]
    pub(crate) struct FrbWrapper<T>(T);
    impl<T: Clone> Clone for FrbWrapper<T> {
        fn clone(&self) -> Self { FrbWrapper(self.0.clone()) }
    }
    impl<T: PartialEq> PartialEq for FrbWrapper<T> {
        fn eq(&self, other: &Self) -> bool { self.0.eq(&other.0) }
    }
    impl<T: Eq> Eq for FrbWrapper<T> {}
    impl<T: std::hash::Hash> std::hash::Hash for FrbWrapper<T> {
        fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
            self.0.hash(state)
        }
    }
    impl<T> From<T> for FrbWrapper<T> {
        fn from(t: T) -> Self { FrbWrapper(t) }
    }
    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.30";
    #[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_MyEnum_foo_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: "MyEnum_foo",
                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_that =
                        <crate::api::simple::MyEnum>::sse_decode(&mut deserializer);
                    deserializer.end();
                    transform_result_sse((move ||
                                    {
                                        Result::<_,
                                                ()>::Ok(crate::api::simple::MyEnum::foo(&api_that))
                                    })())
                })
    }
    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))
                                    })())
                })
    }
    fn wire_init_app_impl(port_:
            flutter_rust_bridge::for_generated::MessagePort,
        ptr_:
            flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
        rust_vec_len_: i32, data_len_: i32) {
        FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec,
            _,
            _>(flutter_rust_bridge::for_generated::TaskInfo {
                debug_name: "init_app",
                port: Some(port_),
                mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
            },
            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);
                    deserializer.end();
                    move |context|
                        {
                            transform_result_sse((move ||
                                            Result::<_, ()>::Ok(crate::api::simple::init_app()))())
                        }
                })
    }
    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 i32 {
        fn sse_decode(deserializer:
                &mut flutter_rust_bridge::for_generated::SseDeserializer)
            -> Self {
            deserializer.cursor.read_i32::<NativeEndian>().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 crate::api::simple::MyEnum {
        fn sse_decode(deserializer:
                &mut flutter_rust_bridge::for_generated::SseDeserializer)
            -> Self {
            let mut inner = <i32>::sse_decode(deserializer);
            return match inner {
                    0 => crate::api::simple::MyEnum::Abc,
                    _ => {
                        ::core::panicking::panic_fmt(format_args!("internal error: entered unreachable code: {0}",
                                format_args!("Invalid variant for MyEnum: {0}", inner)));
                    }
                };
        }
    }
    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 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 {
            2 => wire_init_app_impl(port, ptr, rust_vec_len, data_len),
            _ =>
                ::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 {
            3 => wire_MyEnum_foo_impl(ptr, rust_vec_len, data_len),
            1 => wire_greet_impl(ptr, rust_vec_len, data_len),
            _ =>
                ::core::panicking::panic("internal error: entered unreachable code"),
        }
    }
    impl flutter_rust_bridge::IntoDart for crate::api::simple::MyEnum {
        fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi {
            match self { Self::Abc => 0.into_dart(), }
        }
    }
    impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for
        crate::api::simple::MyEnum {}
    impl flutter_rust_bridge::IntoIntoDart<crate::api::simple::MyEnum> for
        crate::api::simple::MyEnum {
        fn into_into_dart(self) -> crate::api::simple::MyEnum { self }
    }
    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 i32 {
        fn sse_encode(self,
            serializer:
                &mut flutter_rust_bridge::for_generated::SseSerializer) {
            serializer.cursor.write_i32::<NativeEndian>(self).unwrap();
        }
    }
    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 crate::api::simple::MyEnum {
        fn sse_encode(self,
            serializer:
                &mut flutter_rust_bridge::for_generated::SseSerializer) {
            <i32>::sse_encode(match self {
                    crate::api::simple::MyEnum::Abc => 0,
                    _ => {
                        {
                            ::core::panicking::panic_fmt(format_args!("not implemented: {0}",
                                    format_args!("")));
                        };
                    }
                }, 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 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=   Compiling libc v0.2.150
   Compiling proc-macro2 v1.0.70
   Compiling unicode-ident v1.0.12
    Checking memchr v2.6.4
   Compiling futures-core v0.3.29
   Compiling autocfg v1.1.0
   Compiling futures-task v0.3.29
   Compiling futures-channel v0.3.29
    Checking futures-sink v0.3.29
   Compiling futures-util v0.3.29
   Compiling slab v0.4.9
    Checking pin-project-lite v0.2.13
    Checking gimli v0.28.1
   Compiling anyhow v1.0.75
    Checking futures-io v0.3.29
    Checking pin-utils v0.1.0
    Checking adler v1.0.2
    Checking miniz_oxide v0.7.1
    Checking object v0.32.1
    Checking num_cpus v1.16.0
    Checking cfg-if v1.0.0
   Compiling build-target v0.4.0
    Checking rustc-demangle v0.1.23
   Compiling quote v1.0.33
   Compiling flutter_rust_bridge v2.0.0-dev.30
   Compiling cc v1.0.83
    Checking atomic v0.5.3
   Compiling syn v2.0.39
    Checking threadpool v1.8.1
    Checking tokio v1.34.0
    Checking lazy_static v1.4.0
    Checking byteorder v1.5.0
   Compiling flutter_rust_bridge_macros v2.0.0-dev.30
   Compiling backtrace v0.3.69
   Compiling dart-sys-fork v4.1.1
    Checking addr2line v0.21.0
   Compiling futures-macro v0.3.29
   Compiling delegate-attr v0.3.0
    Checking allo-isolate v0.1.24
    Checking futures-executor v0.3.29
    Checking futures v0.3.29
    Checking rust_lib_frb_enum v0.1.0 (/Users/user/Work/frb_enum/rust)
    Finished dev [unoptimized + debuginfo] target(s) in 14.76s


[2024-04-10T07:32:41.268Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/crates.rs:26] parse manifest_path="/Users/user/Work/frb_enum/rust/Cargo.toml"
[2024-04-10T07:32:41.510Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Public, file_path: "/Users/user/Work/frb_enum/rust/src/lib.rs", module_path: ["crate"] }
[2024-04-10T07:32:41.512Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "api"]
[2024-04-10T07:32:41.512Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:202] parse_syn_item_mod_contentless module_path=["crate", "api"]
[2024-04-10T07:32:41.513Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:205] file_path_candidates "api" "/Users/user/Work/frb_enum/rust/src/lib.rs" ["/Users/user/Work/frb_enum/rust/src/api.rs", "/Users/user/Work/frb_enum/rust/src/api/mod.rs", "/Users/user/Work/frb_enum/rust/src/lib/api.rs", "/Users/user/Work/frb_enum/rust/src/lib/api/mod.rs"]
[2024-04-10T07:32:41.513Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/reader.rs:22] read_rust_file rust_file_path="/Users/user/Work/frb_enum/rust/src/api/mod.rs" module=Some("api")
[2024-04-10T07:32:41.513Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/cargo_expand.rs:31] CachedCargoExpand execute manifest_dir= rust_crate_dir="/Users/user/Work/frb_enum/rust"
[2024-04-10T07:32:41.514Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:216] Trying to parse "/Users/user/Work/frb_enum/rust/src/api/mod.rs"
[2024-04-10T07:32:41.514Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Public, file_path: "/Users/user/Work/frb_enum/rust/src/api/mod.rs", module_path: ["crate", "api"] }
[2024-04-10T07:32:41.514Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "api", "simple"]
[2024-04-10T07:32:41.514Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:180] parse_syn_item_mod_contentful module_path=["crate", "api", "simple"]
[2024-04-10T07:32:41.515Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Public, file_path: "/Users/user/Work/frb_enum/rust/src/api/mod.rs", module_path: ["crate", "api", "simple"] }
[2024-04-10T07:32:41.515Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MyEnum, span: bytes(1548..1554) }
[2024-04-10T07:32:41.517Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Public, file_path: "/Users/user/Work/frb_enum/rust/src/api/mod.rs", module_path: ["crate", "api", "simple"] }
[2024-04-10T07:32:41.519Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Public, file_path: "/Users/user/Work/frb_enum/rust/src/api/mod.rs", module_path: ["crate", "api"] }
[2024-04-10T07:32:41.519Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "frb_generated"]
[2024-04-10T07:32:41.520Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:202] parse_syn_item_mod_contentless module_path=["crate", "frb_generated"]
[2024-04-10T07:32:41.520Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:205] file_path_candidates "frb_generated" "/Users/user/Work/frb_enum/rust/src/lib.rs" ["/Users/user/Work/frb_enum/rust/src/frb_generated.rs", "/Users/user/Work/frb_enum/rust/src/frb_generated/mod.rs", "/Users/user/Work/frb_enum/rust/src/lib/frb_generated.rs", "/Users/user/Work/frb_enum/rust/src/lib/frb_generated/mod.rs"]
[2024-04-10T07:32:41.520Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/reader.rs:22] read_rust_file rust_file_path="/Users/user/Work/frb_enum/rust/src/frb_generated.rs" module=Some("frb_generated")
[2024-04-10T07:32:41.520Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/cargo_expand.rs:31] CachedCargoExpand execute manifest_dir= rust_crate_dir="/Users/user/Work/frb_enum/rust"
[2024-04-10T07:32:41.521Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:216] Trying to parse "/Users/user/Work/frb_enum/rust/src/frb_generated.rs"
[2024-04-10T07:32:41.530Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Inherited, file_path: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated"] }
[2024-04-10T07:32:41.530Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: FrbWrapper, span: bytes(2715..2725) }
[2024-04-10T07:32:41.530Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MoiArc, span: bytes(3389..3395) }
[2024-04-10T07:32:41.530Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(7215..7223) }, 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(7226..7231) }, arguments: PathArguments::None }] } }, semi_token: Semi }
[2024-04-10T07:32:41.531Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(7246..7256) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(7257..7258) }, 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(7262..7265) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: sync, span: bytes(7267..7271) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RwLock, span: bytes(7273..7279) }, 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(7280..7295) }, 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(7296..7297) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-04-10T07:32:41.531Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MoiArcPoolInner, span: bytes(7316..7331) }
[2024-04-10T07:32:41.531Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: IdGenerator, span: bytes(7624..7635) }
[2024-04-10T07:32:41.531Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: MoiArcPoolValue, span: bytes(8208..8223) }
[2024-04-10T07:32:41.531Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(8632..8673) }, 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(8687..8700) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(8701..8702) }, 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(8716..8735) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: for_generated, span: bytes(8737..8750) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RustOpaqueBase, span: bytes(8752..8766) }, 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(8767..8768) }, arguments: PathArguments::None }] } }), Comma, GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: MoiArc, span: bytes(8770..8776) }, 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(8777..8778) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-04-10T07:32:41.531Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(8786..8898) }, 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(8912..8922) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(8923..8924) }, 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(8928..8941) }, 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(8942..8943) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(9000..9045) }, 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(9059..9076) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(9077..9078) }, 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(9092..9111) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: for_generated, span: bytes(9113..9126) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RustAutoOpaqueBase, span: bytes(9128..9146) }, 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(9147..9148) }, arguments: PathArguments::None }] } }), Comma, GenericArgument::Type(Type::Path { qself: None, path: Path { leading_colon: None, segments: [PathSegment { ident: Ident { sym: MoiArc, span: bytes(9158..9164) }, 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(9167..9186) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: for_generated, span: bytes(9188..9201) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: rust_async, span: bytes(9203..9213) }, arguments: PathArguments::None }, PathSep, PathSegment { ident: Ident { sym: RwLock, span: bytes(9215..9221) }, 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(9222..9223) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(9232..9298) }, 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(9303..9383) }, 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(9388..9434) }, 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(9448..9462) }, generics: Generics { lt_token: Some(Lt), params: [GenericParam::Type(TypeParam { attrs: [], ident: Ident { sym: T, span: bytes(9463..9464) }, 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(9468..9485) }, 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(9486..9487) }, arguments: PathArguments::None }] } })], gt_token: Gt } }] } }, semi_token: Semi }
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:101] parse_syn_item_struct_or_enum item_ident=Ident { sym: StreamSink, span: bytes(11143..11153) }
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/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(13204..13231) }
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:150] parse_syn_item_mod module_path=["crate", "frb_generated", "io"]
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:180] parse_syn_item_mod_contentful module_path=["crate", "frb_generated", "io"]
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:31] parse START info=ModuleInfo { visibility: Inherited, file_path: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated", "io"] }
[2024-04-10T07:32:41.532Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Inherited, file_path: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated", "io"] }
[2024-04-10T07:32:41.534Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Inherited, file_path: "/Users/user/Work/frb_enum/rust/src/frb_generated.rs", module_path: ["crate", "frb_generated"] }
[2024-04-10T07:32:41.535Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/source_graph/module_parser.rs:77] parse END info=ModuleInfo { visibility: Public, file_path: "/Users/user/Work/frb_enum/rust/src/lib.rs", module_path: ["crate"] }
[2024-04-10T07:32:41.540Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/function_parser/mod.rs:67] parse_function function name: Ident { sym: greet, span: bytes(37..42) }
[2024-04-10T07:32:41.544Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/function_parser/mod.rs:67] parse_function function name: Ident { sym: init_app, span: bytes(266..274) }
[2024-04-10T07:32:41.544Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/codegen/parser/function_parser/mod.rs:67] parse_function function name: Ident { sym: foo, span: bytes(712..715) }
[2024-04-10T07:32:41.557Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/format_dart.rs:13] execute format_dart paths=["lib/src/rust/api/simple.dart", "lib/src/rust/frb_generated.dart", "lib/src/rust/frb_generated.io.dart", "lib/src/rust/frb_generated.web.dart"] line_length=80
[2024-04-10T07:32:41.557Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:129] execute command: bin=sh args="-c \"dart\" \"format\" \"--line-length\" \"80\" \"lib/src/rust/api/simple.dart\" \"lib/src/rust/frb_generated.dart\" \"lib/src/rust/frb_generated.io.dart\" \"lib/src/rust/frb_generated.web.dart\"" current_dir=Some("/Users/user/Work/frb_enum") cmd=cd "/Users/user/Work/frb_enum" && "sh" "-c" "\"dart\" \"format\" \"--line-length\" \"80\" \"lib/src/rust/api/simple.dart\" \"lib/src/rust/frb_generated.dart\" \"lib/src/rust/frb_generated.io.dart\" \"lib/src/rust/frb_generated.web.dart\""
[2024-04-10T07:32:42.275Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:140] command=cd "/Users/user/Work/frb_enum" && "sh" "-c" "\"dart\" \"format\" \"--line-length\" \"80\" \"lib/src/rust/api/simple.dart\" \"lib/src/rust/frb_generated.dart\" \"lib/src/rust/frb_generated.io.dart\" \"lib/src/rust/frb_generated.web.dart\"" stdout=Formatted lib/src/rust/api/simple.dart
Formatted lib/src/rust/frb_generated.dart
Formatted lib/src/rust/frb_generated.io.dart
Formatted lib/src/rust/frb_generated.web.dart
Formatted 4 files (4 changed) in 0.42 seconds.
 stderr=
[2024-04-10T07:32:42.276Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/format_rust.rs:9] execute format_rust paths=["src/frb_generated.rs", "src/frb_generated.io.rs", "src/frb_generated.web.rs"]
[2024-04-10T07:32:42.276Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:129] execute command: bin=sh args="-c \"rustfmt\" \"--edition\" \"2018\" \"src/frb_generated.rs\" \"src/frb_generated.io.rs\" \"src/frb_generated.web.rs\"" current_dir=Some("/Users/user/Work/frb_enum/rust") cmd=cd "/Users/user/Work/frb_enum/rust" && "sh" "-c" "\"rustfmt\" \"--edition\" \"2018\" \"src/frb_generated.rs\" \"src/frb_generated.io.rs\" \"src/frb_generated.web.rs\""
[2024-04-10T07:32:42.425Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/commands/command_runner.rs:140] command=cd "/Users/user/Work/frb_enum/rust" && "sh" "-c" "\"rustfmt\" \"--edition\" \"2018\" \"src/frb_generated.rs\" \"src/frb_generated.io.rs\" \"src/frb_generated.web.rs\"" stdout= stderr=
[2024-04-10T07:32:42.425Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/utils/dart_repository/dart_repo.rs:22] Guessing toolchain the runner is run into
[2024-04-10T07:32:42.427Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/utils/dart_repository/dart_repo.rs:71] Checking presence of flutter_rust_bridge in dependencies at /Users/user/Work/frb_enum
[2024-04-10T07:32:42.431Z DEBUG /flutter_rust_bridge_codegen-2.0.0-dev.30/src/library/utils/dart_repository/dart_repo.rs:103] Checking presence of flutter_rust_bridge in dependencies at /Users/user/Work/frb_enum
[15.3s] Parse  
  └── [15.0s] Run cargo expand  
  └── [0.3s] Parse source graph  
[0.0s] Generate  
[0.9s] Polish  
  └── [0.7s] Run Dart formatter  
  └── [0.1s] Run Rust formatter  
  └── [0.0s] Auto upgrade
Done!


### Expected behavior

_No response_

### Generated binding code

_No response_

### OS

_No response_

### Version of `flutter_rust_bridge_codegen`

2.0.0-dev.30

### Flutter info

```shell
[✓] Flutter (Channel stable, 3.19.4, on macOS 14.4.1 23E224 darwin-x64, locale ru-RU)
    • Flutter version 3.19.4 on channel stable at /Users/user/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 68bfaea224 (3 weeks ago), 2024-03-20 15:36:31 -0700
    • Engine revision a5c24f538d
    • Dart version 3.3.2
    • DevTools version 2.31.1

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/user/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • ANDROID_HOME = /Users/user/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.9+0-17.0.9b1087.7-11185874)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 15E204a
    • CocoaPods version 1.15.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2023.2)
    • 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 17.0.9+0-17.0.9b1087.7-11185874)

[✓] VS Code (version 1.88.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.86.0

[✓] Connected device (3 available)
    • iPhone (mobile)             • 00008101-001275A802DB001E • ios            • iOS 17.3.1 21D61
    • macOS (desktop)             • macos                     • darwin-x64     • macOS 14.4.1 23E224 darwin-x64
    • Chrome (web)                • chrome                    • web-javascript • Google Chrome 123.0.6312.107

[✓] Network resources
    • All expected network resources are available.

• No issues found!


### Version of `clang++`

_No response_

### Additional context

_No response_
@fzyzcjy
Copy link
Owner

fzyzcjy commented Apr 10, 2024

Good point! Feel free to PR for this (happy to provide hints if needed, this may not be very hard), alternatively I will fix it in the next batch.

@fzyzcjy fzyzcjy added awaiting Waiting for responses, PR, further discussions, upstream release, etc and removed awaiting Waiting for responses, PR, further discussions, upstream release, etc labels Apr 10, 2024
@NightBlaze
Copy link
Author

Good point! Feel free to PR for this (happy to provide hints if needed, this may not be very hard), alternatively I will fix it in the next batch.

I will wait for the fix in the next release. Thanks!

@fzyzcjy
Copy link
Owner

fzyzcjy commented Apr 10, 2024

You are welcome! Hopefully I will do the next batch in a week,

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 Apr 29, 2024
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

Successfully merging a pull request may close this issue.

2 participants