Skip to content

Commit 7923a8e

Browse files
committed
Generic enums with concrete type aliases
1 parent 7b40e04 commit 7923a8e

File tree

96 files changed

+38977
-14963
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+38977
-14963
lines changed

frb_codegen/src/library/codegen/generator/api_dart/spec_generator/class/ty/enumeration.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ use crate::library::codegen::generator::api_dart::spec_generator::base::*;
1111
impl ApiDartGeneratorClassTrait for EnumRefApiDartGenerator<'_> {
1212
fn generate_class(&self) -> Option<ApiDartGeneratedClass> {
1313
let src = self.mir.get(self.context.mir_pack);
14+
15+
// Skip generic templates - they should not be code-generated
16+
if src.is_generic_template {
17+
return None;
18+
}
1419

1520
let methods = generate_api_methods(
1621
&MirType::EnumRef(self.mir.clone()),

frb_codegen/src/library/codegen/generator/api_dart/spec_generator/class/ty/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ impl ApiDartGeneratorClassTrait for DartFnApiDartGenerator<'_> {}
3030
impl ApiDartGeneratorClassTrait for DartOpaqueApiDartGenerator<'_> {}
3131
impl ApiDartGeneratorClassTrait for DynamicApiDartGenerator<'_> {}
3232
impl ApiDartGeneratorClassTrait for GeneralListApiDartGenerator<'_> {}
33+
impl ApiDartGeneratorClassTrait for GenericApiDartGenerator<'_> {}
3334
impl ApiDartGeneratorClassTrait for OptionalApiDartGenerator<'_> {}
3435
impl ApiDartGeneratorClassTrait for PrimitiveApiDartGenerator<'_> {}
3536
impl ApiDartGeneratorClassTrait for PrimitiveListApiDartGenerator<'_> {}

frb_codegen/src/library/codegen/generator/api_dart/spec_generator/class/ty/structure.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ use crate::library::codegen::generator::api_dart::spec_generator::base::*;
1313
impl ApiDartGeneratorClassTrait for StructRefApiDartGenerator<'_> {
1414
fn generate_class(&self) -> Option<ApiDartGeneratedClass> {
1515
let src = self.mir.get(self.context.mir_pack);
16+
17+
// Skip generic templates - they should not be code-generated
18+
if src.is_generic_template {
19+
return None;
20+
}
21+
1622
let comments = generate_dart_comments(&src.comments);
1723
let metadata = generate_dart_metadata(&src.effective_dart_metadata());
1824

frb_codegen/src/library/codegen/generator/api_dart/spec_generator/info.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ impl ApiDartGeneratorInfoTrait for GeneralListApiDartGenerator<'_> {
161161
}
162162
}
163163

164+
impl ApiDartGeneratorInfoTrait for GenericApiDartGenerator<'_> {
165+
fn dart_api_type(&self) -> String {
166+
// Generic types should not appear in Dart code directly
167+
// They are placeholders that get substituted during template instantiation
168+
format!("Generic<{}>", self.mir.param_name)
169+
}
170+
}
171+
164172
impl ApiDartGeneratorInfoTrait for OptionalApiDartGenerator<'_> {
165173
fn dart_api_type(&self) -> String {
166174
let inner = ApiDartGenerator::new(self.mir.inner.clone(), self.context);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use crate::codegen::generator::codec::sse::ty::*;
2+
3+
impl CodecSseTyTrait for GenericCodecSseTy<'_> {
4+
fn generate_encode(&self, _lang: &Lang) -> Option<String> {
5+
// Generic types should not appear in generated code - they are placeholders
6+
None
7+
}
8+
9+
fn generate_decode(&self, _lang: &Lang) -> Option<String> {
10+
// Generic types should not appear in generated code - they are placeholders
11+
None
12+
}
13+
}
14+

frb_codegen/src/library/codegen/generator/codec/sse/ty/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ pub(crate) mod delegate;
55
mod dynamic;
66
pub(crate) mod enumeration;
77
mod general_list;
8+
mod generic;
89
mod optional;
910
mod primitive;
1011
mod primitive_list;

frb_codegen/src/library/codegen/generator/misc/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub fn is_js_value(ty: &MirType) -> bool {
2929
MirType::Primitive(_) | MirType::PrimitiveList(_) => false,
3030
// frb-coverage:ignore-start
3131
MirType::Dynamic(_) | MirType::TraitDef(_) => unreachable!(),
32+
MirType::Generic(_) => unreachable!("Generic types should not appear in final code generation"),
3233
// frb-coverage:ignore-end
3334
}
3435
}

frb_codegen/src/library/codegen/generator/misc/structs_macro.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ macro_rules! codegen_generator_structs {
1515
Dynamic,
1616
EnumRef,
1717
GeneralList,
18+
Generic,
1819
Optional,
1920
Primitive,
2021
PrimitiveList,
@@ -34,6 +35,7 @@ macro_rules! codegen_generator_structs {
3435
use $crate::codegen::ir::mir::ty::dynamic::MirTypeDynamic;
3536
use $crate::codegen::ir::mir::ty::enumeration::MirTypeEnumRef;
3637
use $crate::codegen::ir::mir::ty::general_list::MirTypeGeneralList;
38+
use $crate::codegen::ir::mir::ty::generic::MirTypeGeneric;
3739
use $crate::codegen::ir::mir::ty::optional::MirTypeOptional;
3840
use $crate::codegen::ir::mir::ty::primitive::MirTypePrimitive;
3941
use $crate::codegen::ir::mir::ty::primitive_list::MirTypePrimitiveList;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use crate::codegen::generator::acc::Acc;
2+
use crate::codegen::generator::misc::target::Target;
3+
use crate::codegen::generator::wire::dart::spec_generator::codec::cst::base::*;
4+
use crate::codegen::generator::wire::dart::spec_generator::codec::cst::encoder::ty::WireDartCodecCstGeneratorEncoderTrait;
5+
6+
impl WireDartCodecCstGeneratorEncoderTrait for GenericWireDartCodecCstGenerator<'_> {
7+
fn generate_encode_func_body(&self) -> Acc<Option<String>> {
8+
Acc::default()
9+
}
10+
11+
fn dart_wire_type(&self, _target: Target) -> String {
12+
// Generic types should not appear in generated code
13+
"UNREACHABLE_DART_WIRE_TYPE".into()
14+
}
15+
}
16+

frb_codegen/src/library/codegen/generator/wire/dart/spec_generator/codec/cst/encoder/ty/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ mod delegate;
55
mod dynamic;
66
mod enumeration;
77
mod general_list;
8+
mod generic;
89
mod optional;
910
mod primitive;
1011
mod primitive_list;

0 commit comments

Comments
 (0)