@@ -57,13 +57,9 @@ func (c *Cache) Close() {
5757}
5858
5959func (c * Cache ) Put (pkg * packages.Package , mode HashMode , key string , data any ) error {
60- var err error
61- buf := & bytes.Buffer {}
62- c .sw .TrackStage ("gob" , func () {
63- err = gob .NewEncoder (buf ).Encode (data )
64- })
60+ buf , err := c .encode (data )
6561 if err != nil {
66- return fmt . Errorf ( "failed to gob encode: %w" , err )
62+ return err
6763 }
6864
6965 var aID cache.ActionID
@@ -123,14 +119,7 @@ func (c *Cache) Get(pkg *packages.Package, mode HashMode, key string, data any)
123119 return fmt .Errorf ("failed to get data from low-level cache by key %s for package %s: %w" , key , pkg .Name , err )
124120 }
125121
126- c .sw .TrackStage ("gob" , func () {
127- err = gob .NewDecoder (bytes .NewReader (b )).Decode (data )
128- })
129- if err != nil {
130- return fmt .Errorf ("failed to gob decode: %w" , err )
131- }
132-
133- return nil
122+ return c .decode (b , data )
134123}
135124
136125func (c * Cache ) pkgActionID (pkg * packages.Package , mode HashMode ) (cache.ActionID , error ) {
@@ -228,6 +217,29 @@ func (c *Cache) packageHash(pkg *packages.Package, mode HashMode) (string, error
228217 return hashRes [mode ], nil
229218}
230219
220+ func (c * Cache ) encode (data any ) (* bytes.Buffer , error ) {
221+ buf := & bytes.Buffer {}
222+ err := c .sw .TrackStageErr ("gob" , func () error {
223+ return gob .NewEncoder (buf ).Encode (data )
224+ })
225+ if err != nil {
226+ return nil , fmt .Errorf ("failed to gob encode: %w" , err )
227+ }
228+
229+ return buf , nil
230+ }
231+
232+ func (c * Cache ) decode (b []byte , data any ) error {
233+ err := c .sw .TrackStageErr ("gob" , func () error {
234+ return gob .NewDecoder (bytes .NewReader (b )).Decode (data )
235+ })
236+ if err != nil {
237+ return fmt .Errorf ("failed to gob decode: %w" , err )
238+ }
239+
240+ return nil
241+ }
242+
231243func SetSalt (b * bytes.Buffer ) {
232244 cache .SetSalt (b .Bytes ())
233245}
0 commit comments