Files
sailpoint-cli/internal/output/output.go

83 lines
1.6 KiB
Go

package output
import (
"bufio"
"encoding/json"
"io"
"os"
"path"
"github.com/charmbracelet/log"
"github.com/mrz1836/go-sanitize"
"github.com/olekukonko/tablewriter"
)
func SaveJSONFile[T any](formattedResponse T, fileName string, folderPath string) error {
saveName := GetSanitizedPath(fileName, "json")
log.Debug("Saving JSON file", "path", folderPath, "file", saveName)
dataToSave, err := json.MarshalIndent(formattedResponse, "", " ")
if err != nil {
return err
}
log.Debug("Formatted Data", "data", string(dataToSave))
saveErr := WriteFile(folderPath, saveName, dataToSave)
if saveErr != nil {
return saveErr
}
return nil
}
func WriteFile(folderPath string, filePath string, data []byte) error {
// Create the folder if it doesn't exist
if _, err := os.Stat(folderPath); os.IsNotExist(err) {
err = os.MkdirAll(folderPath, 0777)
if err != nil {
return err
}
}
file, err := os.OpenFile(path.Join(folderPath, filePath), os.O_CREATE|os.O_RDWR, 0777)
if err != nil {
return err
}
fileWriter := bufio.NewWriter(file)
_, err = fileWriter.Write(data)
if err != nil {
return err
}
err = fileWriter.Flush()
if err != nil {
return err
}
err = file.Close()
if err != nil {
return err
}
return nil
}
// GetSanitizedPath makes sure the provided path works on all OS
func GetSanitizedPath(fileName string, extension string) string {
return sanitize.PathName(fileName) + "." + extension
}
func WriteTable(writer io.Writer, headers []string, entries [][]string) {
table := tablewriter.NewWriter(writer)
table.SetHeader(headers)
for _, line := range entries {
table.Append(line)
}
table.Render()
}