mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-25 08:31:03 +00:00
Cleanup json-related code with additions
`detailsFormat` key removed from config `MarshalIntoFormat` renamed into `marshalIntoFormat` with better description `MarshalIntoYaml` introduced as `marshalIntoFormat` wrapper for common usage
This commit is contained in:
parent
8ab751ef32
commit
781af68827
5 changed files with 13 additions and 11 deletions
|
|
@ -130,10 +130,6 @@ type GuiConfig struct {
|
||||||
// When true, increases vertical space used by focused side panel,
|
// When true, increases vertical space used by focused side panel,
|
||||||
// creating an accordion effect
|
// creating an accordion effect
|
||||||
ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"`
|
ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"`
|
||||||
|
|
||||||
// DetailsFormat determines in which format will be printed container stats and configs
|
|
||||||
// By default "yaml", available values "json", "yaml"
|
|
||||||
DetailsFormat string `yaml:"detailsFormat,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommandTemplatesConfig determines what commands actually get called when we
|
// CommandTemplatesConfig determines what commands actually get called when we
|
||||||
|
|
@ -366,7 +362,6 @@ func GetDefaultConfig() UserConfig {
|
||||||
SidePanelWidth: 0.3333,
|
SidePanelWidth: 0.3333,
|
||||||
ShowBottomLine: true,
|
ShowBottomLine: true,
|
||||||
ExpandFocusedSidePanel: false,
|
ExpandFocusedSidePanel: false,
|
||||||
DetailsFormat: "yaml",
|
|
||||||
},
|
},
|
||||||
ConfirmOnQuit: false,
|
ConfirmOnQuit: false,
|
||||||
Logs: LogsConfig{
|
Logs: LogsConfig{
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,7 @@ func (gui *Gui) containerConfigStr(container *commands.Container) string {
|
||||||
output += "none\n"
|
output += "none\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := utils.MarshalIntoFormat(&container.Details, gui.Config.UserConfig.Gui.DetailsFormat)
|
data, err := utils.MarshalIntoYaml(&container.Details)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Sprintf("Error marshalling container details: %v", err)
|
return fmt.Sprintf("Error marshalling container details: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ func RenderStats(userConfig *config.UserConfig, container *commands.Container, v
|
||||||
dataReceived := fmt.Sprintf("Traffic received: %s", utils.FormatDecimalBytes(stats.ClientStats.Networks.Eth0.RxBytes))
|
dataReceived := fmt.Sprintf("Traffic received: %s", utils.FormatDecimalBytes(stats.ClientStats.Networks.Eth0.RxBytes))
|
||||||
dataSent := fmt.Sprintf("Traffic sent: %s", utils.FormatDecimalBytes(stats.ClientStats.Networks.Eth0.TxBytes))
|
dataSent := fmt.Sprintf("Traffic sent: %s", utils.FormatDecimalBytes(stats.ClientStats.Networks.Eth0.TxBytes))
|
||||||
|
|
||||||
originalStats, err := utils.MarshalIntoFormat(stats, userConfig.Gui.DetailsFormat)
|
originalStats, err := utils.MarshalIntoYaml(stats)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -385,7 +385,14 @@ func OpensMenuStyle(str string) string {
|
||||||
return ColoredString(fmt.Sprintf("%s...", str), color.FgMagenta)
|
return ColoredString(fmt.Sprintf("%s...", str), color.FgMagenta)
|
||||||
}
|
}
|
||||||
|
|
||||||
func MarshalIntoFormat(data interface{}, format string) ([]byte, error) {
|
// MarshalIntoYaml gets any json-tagged data and marshal it into yaml saving original json structure.
|
||||||
|
// Useful for structs from 3rd-party libs without yaml tags.
|
||||||
|
func MarshalIntoYaml(data interface{}) ([]byte, error) {
|
||||||
|
return marshalIntoFormat(data, "yaml")
|
||||||
|
}
|
||||||
|
|
||||||
|
func marshalIntoFormat(data interface{}, format string) ([]byte, error) {
|
||||||
|
// First marshal struct->json to get the resulting structure declared by json tags
|
||||||
dataJSON, err := json.MarshalIndent(data, "", " ")
|
dataJSON, err := json.MarshalIndent(data, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -394,7 +401,7 @@ func MarshalIntoFormat(data interface{}, format string) ([]byte, error) {
|
||||||
case "json":
|
case "json":
|
||||||
return dataJSON, err
|
return dataJSON, err
|
||||||
case "yaml":
|
case "yaml":
|
||||||
// Use Unmarshal->Marshal hack to convert vendor-locked objects to YAML with same structure as JSON
|
// Use Unmarshal->Marshal hack to convert json into yaml with the original structure preserved
|
||||||
var dataMirror yaml.MapSlice
|
var dataMirror yaml.MapSlice
|
||||||
if err := yaml.Unmarshal(dataJSON, &dataMirror); err != nil {
|
if err := yaml.Unmarshal(dataJSON, &dataMirror); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ func TestMarshalIntoFormat(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type scenario struct {
|
type scenario struct {
|
||||||
input data
|
input interface{}
|
||||||
format string
|
format string
|
||||||
expected []byte
|
expected []byte
|
||||||
expectedErr error
|
expectedErr error
|
||||||
|
|
@ -310,7 +310,7 @@ quux:
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, s := range scenarios {
|
for _, s := range scenarios {
|
||||||
output, err := MarshalIntoFormat(s.input, s.format)
|
output, err := marshalIntoFormat(s.input, s.format)
|
||||||
assert.EqualValues(t, s.expected, output)
|
assert.EqualValues(t, s.expected, output)
|
||||||
if s.expectedErr != nil {
|
if s.expectedErr != nil {
|
||||||
assert.EqualError(t, err, s.expectedErr.Error())
|
assert.EqualError(t, err, s.expectedErr.Error())
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue