@@ -60,7 +60,7 @@ pub struct FileEntry {
6060}
6161
6262/// Cache for storing parsed CODEOWNERS information
63- #[ derive( Debug , Serialize , Deserialize ) ]
63+ #[ derive( Debug ) ]
6464pub struct CodeownersCache {
6565 pub entries : Vec < CodeownersEntry > ,
6666 pub files : Vec < FileEntry > ,
@@ -69,6 +69,65 @@ pub struct CodeownersCache {
6969 pub tags_map : std:: collections:: HashMap < Tag , Vec < PathBuf > > ,
7070}
7171
72+ impl Serialize for CodeownersCache {
73+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
74+ where
75+ S : serde:: Serializer ,
76+ {
77+ use serde:: ser:: SerializeStruct ;
78+
79+ let mut state = serializer. serialize_struct ( "CodeownersCache" , 4 ) ?;
80+ state. serialize_field ( "entries" , & self . entries ) ?;
81+ state. serialize_field ( "files" , & self . files ) ?;
82+
83+ // Convert owners_map to a serializable format
84+ let owners_map_serializable: Vec < ( & Owner , & Vec < PathBuf > ) > =
85+ self . owners_map . iter ( ) . collect ( ) ;
86+ state. serialize_field ( "owners_map" , & owners_map_serializable) ?;
87+
88+ // Convert tags_map to a serializable format
89+ let tags_map_serializable: Vec < ( & Tag , & Vec < PathBuf > ) > = self . tags_map . iter ( ) . collect ( ) ;
90+ state. serialize_field ( "tags_map" , & tags_map_serializable) ?;
91+
92+ state. end ( )
93+ }
94+ }
95+
96+ impl < ' de > Deserialize < ' de > for CodeownersCache {
97+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
98+ where
99+ D : serde:: Deserializer < ' de > ,
100+ {
101+ #[ derive( Deserialize ) ]
102+ struct CodeownersCacheHelper {
103+ entries : Vec < CodeownersEntry > ,
104+ files : Vec < FileEntry > ,
105+ owners_map : Vec < ( Owner , Vec < PathBuf > ) > ,
106+ tags_map : Vec < ( Tag , Vec < PathBuf > ) > ,
107+ }
108+
109+ let helper = CodeownersCacheHelper :: deserialize ( deserializer) ?;
110+
111+ // Convert back to HashMap
112+ let mut owners_map = std:: collections:: HashMap :: new ( ) ;
113+ for ( owner, paths) in helper. owners_map {
114+ owners_map. insert ( owner, paths) ;
115+ }
116+
117+ let mut tags_map = std:: collections:: HashMap :: new ( ) ;
118+ for ( tag, paths) in helper. tags_map {
119+ tags_map. insert ( tag, paths) ;
120+ }
121+
122+ Ok ( CodeownersCache {
123+ entries : helper. entries ,
124+ files : helper. files ,
125+ owners_map,
126+ tags_map,
127+ } )
128+ }
129+ }
130+
72131#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
73132pub enum CacheEncoding {
74133 Bincode ,
0 commit comments