3
3
pub ( crate ) mod page;
4
4
5
5
use log:: { debug, info} ;
6
+ use serde_json:: Value ;
6
7
7
8
/// ctry! (cratesfyitry) is extremely similar to try! and itry!
8
9
/// except it returns an error page response instead of plain Err.
@@ -542,6 +543,8 @@ pub(crate) struct MetaData {
542
543
pub ( crate ) target_name : Option < String > ,
543
544
pub ( crate ) rustdoc_status : bool ,
544
545
pub ( crate ) default_target : String ,
546
+ pub ( crate ) doc_targets : Vec < String > ,
547
+ pub ( crate ) yanked : bool ,
545
548
}
546
549
547
550
impl MetaData {
@@ -553,7 +556,9 @@ impl MetaData {
553
556
releases.description,
554
557
releases.target_name,
555
558
releases.rustdoc_status,
556
- releases.default_target
559
+ releases.default_target,
560
+ releases.doc_targets,
561
+ releases.yanked
557
562
FROM releases
558
563
INNER JOIN crates ON crates.id = releases.crate_id
559
564
WHERE crates.name = $1 AND releases.version = $2" ,
@@ -570,8 +575,22 @@ impl MetaData {
570
575
target_name : row. get ( 3 ) ,
571
576
rustdoc_status : row. get ( 4 ) ,
572
577
default_target : row. get ( 5 ) ,
578
+ doc_targets : MetaData :: parse_doc_targets ( row. get ( 6 ) ) ,
579
+ yanked : row. get ( 7 ) ,
573
580
} )
574
581
}
582
+
583
+ fn parse_doc_targets ( targets : Value ) -> Vec < String > {
584
+ targets
585
+ . as_array ( )
586
+ . map ( |array| {
587
+ array
588
+ . iter ( )
589
+ . filter_map ( |item| item. as_str ( ) . map ( |s| s. to_owned ( ) ) )
590
+ . collect ( )
591
+ } )
592
+ . unwrap_or_else ( Vec :: new)
593
+ }
575
594
}
576
595
577
596
#[ derive( Debug , Clone , PartialEq , Serialize ) ]
@@ -840,6 +859,11 @@ mod test {
840
859
target_name : None ,
841
860
rustdoc_status : true ,
842
861
default_target : "x86_64-unknown-linux-gnu" . to_string ( ) ,
862
+ doc_targets : vec ! [
863
+ "x86_64-unknown-linux-gnu" . to_string( ) ,
864
+ "arm64-unknown-linux-gnu" . to_string( ) ,
865
+ ] ,
866
+ yanked : false ,
843
867
} ;
844
868
845
869
let correct_json = json ! ( {
@@ -848,19 +872,29 @@ mod test {
848
872
"description" : "serde does stuff" ,
849
873
"target_name" : null,
850
874
"rustdoc_status" : true ,
851
- "default_target" : "x86_64-unknown-linux-gnu"
875
+ "default_target" : "x86_64-unknown-linux-gnu" ,
876
+ "doc_targets" : [
877
+ "x86_64-unknown-linux-gnu" ,
878
+ "arm64-unknown-linux-gnu" ,
879
+ ] ,
880
+ "yanked" : false ,
852
881
} ) ;
853
882
854
883
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
855
884
856
- metadata. target_name = Some ( "x86_64-apple-darwin " . to_string ( ) ) ;
885
+ metadata. target_name = Some ( "serde_lib_name " . to_string ( ) ) ;
857
886
let correct_json = json ! ( {
858
887
"name" : "serde" ,
859
888
"version" : "1.0.0" ,
860
889
"description" : "serde does stuff" ,
861
- "target_name" : "x86_64-apple-darwin " ,
890
+ "target_name" : "serde_lib_name " ,
862
891
"rustdoc_status" : true ,
863
- "default_target" : "x86_64-unknown-linux-gnu"
892
+ "default_target" : "x86_64-unknown-linux-gnu" ,
893
+ "doc_targets" : [
894
+ "x86_64-unknown-linux-gnu" ,
895
+ "arm64-unknown-linux-gnu" ,
896
+ ] ,
897
+ "yanked" : false ,
864
898
} ) ;
865
899
866
900
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -870,9 +904,14 @@ mod test {
870
904
"name" : "serde" ,
871
905
"version" : "1.0.0" ,
872
906
"description" : null,
873
- "target_name" : "x86_64-apple-darwin " ,
907
+ "target_name" : "serde_lib_name " ,
874
908
"rustdoc_status" : true ,
875
- "default_target" : "x86_64-unknown-linux-gnu"
909
+ "default_target" : "x86_64-unknown-linux-gnu" ,
910
+ "doc_targets" : [
911
+ "x86_64-unknown-linux-gnu" ,
912
+ "arm64-unknown-linux-gnu" ,
913
+ ] ,
914
+ "yanked" : false ,
876
915
} ) ;
877
916
878
917
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
0 commit comments