@@ -368,26 +368,23 @@ pub fn implement_entity(input: &EntityMacroInput, item_struct: &ItemStruct) -> O
368
368
} ;
369
369
let ret_type = syn:: parse_str :: < Type > ( hashmap. get ( & * entity) . unwrap ( ) ) . unwrap ( ) ;
370
370
371
- let query_function_name = make_query_function_name ( first, & element. as_value . value ( ) ) ;
371
+ let ( query_module_name, query_struct_name) =
372
+ make_query_function_name ( first, & element. as_value . value ( ) ) ;
372
373
// FIXME: bad assumption of always calling .to_string() here (mostly just that should suffice, but...)
373
374
let mut full_query_function_call = quote ! {
374
- let data = hartex_database_queries:: discord_frontend :: queries :: #query_function_name :: #query_function_name ( ) . bind( client , & #param_name. to_string( ) )
375
+ let data = hartex_database_queries:: queries :: discord_frontend :: #query_module_name :: #query_struct_name :: bind( #param_name. to_string( ) ) . executor ( ) . await ?
375
376
} ;
376
377
377
378
let function = match & * element. unique_or_multiple . to_string ( ) {
378
379
"multiple" => {
379
380
let ident = Ident :: new ( & pluralize ( first, 2 , false ) , Span :: call_site ( ) ) ;
380
381
381
382
full_query_function_call. append_all ( quote ! {
382
- . all ( ) . await ?;
383
+ . many ( ) . await ?;
383
384
} ) ;
384
385
385
386
quote ! {
386
387
pub async fn #ident( & self , #param_decl) -> hartex_discord_entitycache_core:: error:: CacheResult <Vec <#ret_type>> {
387
- let pinned = std:: pin:: Pin :: static_ref( & hartex_discord_utils:: DATABASE_POOL ) . await ;
388
- let pooled = pinned. get( ) . await ?;
389
- let client = pooled. client( ) ;
390
-
391
388
#full_query_function_call
392
389
393
390
Ok ( data. into_iter( ) . map( |thing| #ret_type:: from( thing) ) . collect( ) )
@@ -403,10 +400,6 @@ pub fn implement_entity(input: &EntityMacroInput, item_struct: &ItemStruct) -> O
403
400
404
401
quote ! {
405
402
pub async fn #ident( & self , #param_decl) -> hartex_discord_entitycache_core:: error:: CacheResult <#ret_type> {
406
- let pinned = std:: pin:: Pin :: static_ref( & hartex_discord_utils:: DATABASE_POOL ) . await ;
407
- let pooled = pinned. get( ) . await ?;
408
- let client = pooled. client( ) ;
409
-
410
403
#full_query_function_call
411
404
412
405
Ok ( #ret_type:: from( data) )
@@ -423,10 +416,9 @@ pub fn implement_entity(input: &EntityMacroInput, item_struct: &ItemStruct) -> O
423
416
if input. extra_fields_array . elements . is_empty ( ) {
424
417
let extra = assumed_extra_impls
425
418
. map ( |str| {
426
- let ident_snake = Ident :: new ( & str. to_case ( Case :: Snake ) , Span :: call_site ( ) ) ;
427
419
let ident_pascal = Ident :: new ( & str. to_case ( Case :: Pascal ) , Span :: call_site ( ) ) ;
428
420
let full_ident =
429
- quote ! { hartex_database_queries:: discord_frontend :: queries :: #ident_snake :: #ident_pascal} ;
421
+ quote ! { hartex_database_queries:: tables :: discord_frontend :: #ident_pascal} ;
430
422
431
423
quote ! {
432
424
impl From <#full_ident> for #item_struct_name {
@@ -484,10 +476,9 @@ pub fn implement_entity(input: &EntityMacroInput, item_struct: &ItemStruct) -> O
484
476
. multiunzip ( ) ;
485
477
let extra = assumed_extra_impls
486
478
. map ( |str| {
487
- let ident_snake = Ident :: new ( & str. to_case ( Case :: Snake ) , Span :: call_site ( ) ) ;
488
479
let ident_pascal = Ident :: new ( & str. to_case ( Case :: Pascal ) , Span :: call_site ( ) ) ;
489
480
let full_ident =
490
- quote ! { hartex_database_queries:: discord_frontend :: queries :: #ident_snake :: #ident_pascal} ;
481
+ quote ! { hartex_database_queries:: tables :: discord_frontend :: #ident_pascal} ;
491
482
492
483
quote ! {
493
484
impl From <#full_ident> for #item_struct_name {
@@ -568,7 +559,7 @@ fn make_field_decl_and_assignments(
568
559
return (
569
560
quote ! { pub #field_name: #field_type} ,
570
561
quote ! { #field_name: model. #field_name} ,
571
- quote ! { #field_name: model. #field_name. parse( ) . unwrap( ) } ,
562
+ quote ! { #field_name: model. #field_name( ) . parse( ) . unwrap( ) } ,
572
563
) ;
573
564
}
574
565
@@ -582,85 +573,100 @@ fn make_field_decl_and_assignments(
582
573
(
583
574
quote ! { pub #field_name: #field_type} ,
584
575
quote ! { #field_name: model. #field_name} ,
585
- quote ! { #field_name: #field_type:: from( model. #field_name as u8 ) } ,
576
+ quote ! { #field_name: #field_type:: from( model. #field_name( ) as u8 ) } ,
586
577
)
587
578
} else if field_type. is ( "Id" ) {
588
579
(
589
580
quote ! { pub #field_name: #field_type} ,
590
581
quote ! { #field_name: model. #field_name} ,
591
- quote ! { #field_name: std:: str :: FromStr :: from_str( & model. #field_name) . unwrap( ) } ,
582
+ quote ! { #field_name: std:: str :: FromStr :: from_str( model. #field_name( ) ) . unwrap( ) } ,
592
583
)
593
584
} else if field_type. is ( "MemberFlags" ) {
594
585
(
595
586
quote ! { pub #field_name: #field_type} ,
596
587
quote ! { #field_name: model. #field_name} ,
597
- quote ! { #field_name: twilight_model:: guild:: MemberFlags :: from_bits( model. #field_name as u64 ) . unwrap( ) } ,
588
+ quote ! { #field_name: twilight_model:: guild:: MemberFlags :: from_bits( model. #field_name( ) as u64 ) . unwrap( ) } ,
598
589
)
599
590
} else if field_type. is ( "RoleFlags" ) {
600
591
(
601
592
quote ! { pub #field_name: #field_type} ,
602
593
quote ! { #field_name: model. #field_name} ,
603
- quote ! { #field_name: twilight_model:: guild:: RoleFlags :: from_bits( model. #field_name as u64 ) . unwrap( ) } ,
594
+ quote ! { #field_name: twilight_model:: guild:: RoleFlags :: from_bits( model. #field_name( ) as u64 ) . unwrap( ) } ,
604
595
)
605
596
} else if field_type. is_option_of ( "ImageHash" ) {
606
597
(
607
598
quote ! { pub #field_name: #field_type} ,
608
599
quote ! { #field_name: model. #field_name} ,
609
- quote ! { #field_name: model. #field_name. as_deref ( ) . map( |str | std:: str :: FromStr :: from_str( str ) . unwrap( ) ) } ,
600
+ quote ! { #field_name: model. #field_name( ) . map( |str | std:: str :: FromStr :: from_str( str ) . unwrap( ) ) } ,
610
601
)
611
602
} else if field_type. is_option_of ( "Timestamp" ) {
612
603
(
613
604
quote ! { pub #field_name: #field_type} ,
614
605
quote ! { #field_name: model. #field_name} ,
615
- quote ! { #field_name: model. #field_name. map( |timestamp| twilight_model:: util:: Timestamp :: from_secs( timestamp. unix_timestamp( ) ) . unwrap( ) ) } ,
606
+ quote ! { #field_name: model. #field_name( ) . map( |timestamp| twilight_model:: util:: Timestamp :: from_secs( timestamp. timestamp( ) ) . unwrap( ) ) } ,
607
+ )
608
+ } else if field_type. is_option_of ( "String" ) {
609
+ (
610
+ quote ! { pub #field_name: #field_type} ,
611
+ quote ! { #field_name: model. #field_name} ,
612
+ quote ! { #field_name: model. #field_name( ) . map( String :: from) } ,
616
613
)
617
614
} else if field_type. is ( "i64" ) {
618
615
(
619
616
quote ! { pub #field_name: #field_type} ,
620
617
quote ! { #field_name: model. #field_name} ,
621
- quote ! { #field_name: model. #field_name as i64 } ,
618
+ quote ! { #field_name: model. #field_name( ) as i64 } ,
622
619
)
623
620
} else if field_type. is ( "u32" ) {
624
621
(
625
622
quote ! { pub #field_name: #field_type} ,
626
623
quote ! { #field_name: model. #field_name} ,
627
- quote ! { #field_name: model. #field_name as u32 } ,
624
+ quote ! { #field_name: model. #field_name( ) as u32 } ,
625
+ )
626
+ } else if field_type. is ( "String" ) {
627
+ (
628
+ quote ! { pub #field_name: #field_type} ,
629
+ quote ! { #field_name: model. #field_name} ,
630
+ quote ! { #field_name: model. #field_name( ) . to_string( ) } ,
628
631
)
629
632
} else if field_type. is_option_of ( "u64" ) {
630
633
(
631
634
quote ! { pub #field_name: #field_type} ,
632
635
quote ! { #field_name: model. #field_name} ,
633
- quote ! { #field_name: model. #field_name. map( |i| i as u64 ) } ,
636
+ quote ! { #field_name: model. #field_name( ) . map( |i| i as u64 ) } ,
634
637
)
635
638
} else if field_type. is_vec_of ( "GuildFeature" ) {
636
639
(
637
640
quote ! { pub #field_name: #field_type} ,
638
641
quote ! { #field_name: model. #field_name} ,
639
- quote ! { #field_name: model. #field_name. iter( ) . cloned( ) . map( From :: from) . collect( ) } ,
642
+ quote ! { #field_name: model. #field_name( ) . iter( ) . cloned( ) . map( From :: from) . collect( ) } ,
640
643
)
641
644
} else if field_type. is_vec_of ( "Id" ) {
642
645
(
643
646
quote ! { pub #field_name: #field_type} ,
644
647
quote ! { #field_name: model. #field_name} ,
645
- quote ! { #field_name: model. #field_name. iter( ) . map( |str | std:: str :: FromStr :: from_str( str ) . unwrap( ) ) . collect( ) } ,
648
+ quote ! { #field_name: model. #field_name( ) . iter( ) . map( |str | std:: str :: FromStr :: from_str( str ) . unwrap( ) ) . collect( ) } ,
646
649
)
647
650
} else {
648
651
(
649
652
quote ! { pub #field_name: #field_type} ,
650
653
quote ! { #field_name: model. #field_name} ,
651
- quote ! { #field_name: model. #field_name} ,
654
+ quote ! { #field_name: model. #field_name( ) } ,
652
655
)
653
656
}
654
657
}
655
658
656
659
// FIXME: may need to generalize for multiple fields
657
660
/// Construct an identifier containing the database query function name.
658
- fn make_query_function_name ( target_entity : & str , by_field : & str ) -> Ident {
661
+ fn make_query_function_name ( target_entity : & str , by_field : & str ) -> ( Ident , Ident ) {
659
662
let name = format ! (
660
663
"cached_{}_select_by_{}" ,
661
664
target_entity. to_lowercase( ) ,
662
665
by_field. to_lowercase( )
663
666
) ;
664
667
665
- Ident :: new ( & name, Span :: call_site ( ) )
668
+ (
669
+ Ident :: new ( & name, Span :: call_site ( ) ) ,
670
+ Ident :: new ( name. to_case ( Case :: Pascal ) . as_str ( ) , Span :: call_site ( ) ) ,
671
+ )
666
672
}
0 commit comments