@@ -12,17 +12,37 @@ pub type SourceFile = String;
1212pub type HitCount = u32 ;
1313pub use line_number:: LineNumber ;
1414
15- #[ derive( Deserialize , Serialize ) ]
15+ #[ derive( Default , Deserialize , Serialize ) ]
1616pub struct SourceCoverageJson {
1717 #[ serde( flatten) ]
1818 pub files : BTreeMap < SourceFile , FileCoverageJson > ,
1919}
2020
21- #[ derive( Deserialize , Serialize ) ]
21+ #[ derive( Default , Deserialize , Serialize ) ]
2222pub struct FileCoverageJson {
2323 pub lines : BTreeMap < LineNumber , HitCount > ,
2424}
2525
26+ impl From < SourceCoverage > for SourceCoverageJson {
27+ fn from ( source : SourceCoverage ) -> Self {
28+ let mut json = SourceCoverageJson :: default ( ) ;
29+
30+ for ( path, file) in source. files {
31+ let mut file_json = FileCoverageJson :: default ( ) ;
32+
33+ for ( line, count) in file. lines {
34+ let line_number = LineNumber ( line. number ( ) ) ;
35+ let hit_count = count. 0 ;
36+ file_json. lines . insert ( line_number, hit_count) ;
37+ }
38+
39+ json. files . insert ( path. to_string ( ) , file_json) ;
40+ }
41+
42+ json
43+ }
44+ }
45+
2646impl TryFrom < SourceCoverageJson > for SourceCoverage {
2747 type Error = anyhow:: Error ;
2848
0 commit comments