package cli import ( "encoding/json" "fmt" "io" "gitea.maximumdirect.net/eric/weatherreporter/internal/app" ) type outputOptions struct { Quiet bool } func writeActionResult(stdout, stderr io.Writer, value any, opts outputOptions, writeStatus func(io.Writer)) error { if opts.Quiet { return nil } if writeStatus != nil && stderr != nil { writeStatus(stderr) } return writeJSON(stdout, value) } func writeJSON(stdout io.Writer, value any) error { encoder := json.NewEncoder(stdout) encoder.SetIndent("", " ") return encoder.Encode(value) } func writeBatchStatus(stderr io.Writer, result *app.BatchResult) { if stderr == nil || result == nil { return } for _, item := range result.Reports { notificationFields := "" if item.NotificationStatus != "" { notificationFields += fmt.Sprintf(" notificationStatus=%q", item.NotificationStatus) } if item.NotificationRunID != "" { notificationFields += fmt.Sprintf(" notificationRunId=%q", item.NotificationRunID) } if item.NotificationError != "" { notificationFields += fmt.Sprintf(" notificationError=%q", item.NotificationError) } if item.Status == "failed" { _, _ = fmt.Fprintf(stderr, "report=%s status=failed error=%q%s\n", item.ReportID, item.Error, notificationFields) continue } _, _ = fmt.Fprintf(stderr, "report=%s status=succeeded output=%q%s\n", item.ReportID, item.OutputPath, notificationFields) } if result.Notification != nil { _, _ = fmt.Fprintf(stderr, "batchNotification status=%q", result.Notification.Status) if result.Notification.Reason != "" { _, _ = fmt.Fprintf(stderr, " reason=%q", result.Notification.Reason) } if result.Notification.RunID != "" { _, _ = fmt.Fprintf(stderr, " runId=%q", result.Notification.RunID) } if result.Notification.PipelineID != "" { _, _ = fmt.Fprintf(stderr, " pipelineId=%q", result.Notification.PipelineID) } if result.Notification.BundleID != "" { _, _ = fmt.Fprintf(stderr, " bundleId=%q", result.Notification.BundleID) } if result.Notification.Path != "" { _, _ = fmt.Fprintf(stderr, " path=%q", result.Notification.Path) } if result.Notification.Error != "" { _, _ = fmt.Fprintf(stderr, " error=%q", result.Notification.Error) } _, _ = fmt.Fprintln(stderr) } _, _ = fmt.Fprintf(stderr, "batch=%s total=%d succeeded=%d failed=%d\n", result.Batch, result.Total, result.Succeeded, result.Failed) }