virtbuf/storageinfo.go

54 lines
1.2 KiB
Go
Raw Permalink Normal View History

package virtbuf
import (
"encoding/json"
"fmt"
"strconv"
)
// MarshalJSON custom marshals the WhatInfo struct to JSON
func (s WhatInfo) MarshalJSON() ([]byte, error) {
capacityStr := fmt.Sprintf("%d GB", s.Capacity)
return json.Marshal(map[string]string{
"capacity": capacityStr,
})
}
func (s WhatInfo) FormatJSON() string {
return fmt.Sprintf("\"capacity\": \"%d GB\"", s.Capacity)
}
// UnmarshalJSON custom unmarshals JSON into the WhatInfo struct
func (s *WhatInfo) UnmarshalJSON(data []byte) error {
var raw map[string]string
if err := json.Unmarshal(data, &raw); err != nil {
return err
}
if capacityStr, ok := raw["capacity"]; ok {
capacityStr = capacityStr[:len(capacityStr)-3] // Remove the " GB" suffix
capacity, err := strconv.ParseInt(capacityStr, 10, 64)
if err != nil {
return err
}
s.Capacity = capacity
}
return nil
}
/*
func main() {
info := WhatInfo{Capacity: 64}
// Marshaling to JSON
jsonData, _ := json.Marshal(info)
fmt.Println(string(jsonData)) // Output: {"capacity":"64 GB"}
// Unmarshaling back to Go struct
var newInfo WhatInfo
_ = json.Unmarshal(jsonData, &newInfo)
fmt.Println(newInfo.Capacity) // Output: 64
}
*/