Share command output projections
This commit is contained in:
83
internal/app/output_projection.go
Normal file
83
internal/app/output_projection.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitea.maximumdirect.net/eric/distributor/internal/bundle"
|
||||
"gitea.maximumdirect.net/eric/distributor/internal/storage"
|
||||
)
|
||||
|
||||
type bundleSummaryResult struct {
|
||||
Path string `json:"path"`
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
type bundleDetailResult struct {
|
||||
Path string `json:"path"`
|
||||
ID string `json:"id"`
|
||||
Created string `json:"created"`
|
||||
Digest string `json:"digest"`
|
||||
FileCount int `json:"file_count"`
|
||||
TotalSize int64 `json:"total_size"`
|
||||
Files []manifestFileResult `json:"files"`
|
||||
}
|
||||
|
||||
type manifestFileResult struct {
|
||||
Path string `json:"path"`
|
||||
SHA256 string `json:"sha256"`
|
||||
Size int64 `json:"size"`
|
||||
}
|
||||
|
||||
func bundleSummaryFromBundle(sourceBundle bundle.Bundle) bundleSummaryResult {
|
||||
return bundleSummaryResult{
|
||||
Path: storage.DisplayPath(sourceBundle.RootRelativePath),
|
||||
ID: sourceBundle.Manifest.ID,
|
||||
}
|
||||
}
|
||||
|
||||
func bundleSummariesFromBundles(sourceBundles []bundle.Bundle) []bundleSummaryResult {
|
||||
results := make([]bundleSummaryResult, 0, len(sourceBundles))
|
||||
for _, sourceBundle := range sourceBundles {
|
||||
results = append(results, bundleSummaryFromBundle(sourceBundle))
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
func bundleDetailFromBundle(sourceBundle bundle.Bundle) bundleDetailResult {
|
||||
result := bundleDetailResult{
|
||||
Path: storage.DisplayPath(sourceBundle.RootRelativePath),
|
||||
ID: sourceBundle.Manifest.ID,
|
||||
Created: formatManifestCreated(sourceBundle.Manifest.Created),
|
||||
Digest: sourceBundle.Manifest.Digest,
|
||||
FileCount: len(sourceBundle.Manifest.Files),
|
||||
Files: manifestFileResults(sourceBundle.Manifest.Files),
|
||||
}
|
||||
for _, file := range sourceBundle.Manifest.Files {
|
||||
result.TotalSize += file.Size
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func bundleDetailsFromBundles(sourceBundles []bundle.Bundle) []bundleDetailResult {
|
||||
results := make([]bundleDetailResult, 0, len(sourceBundles))
|
||||
for _, sourceBundle := range sourceBundles {
|
||||
results = append(results, bundleDetailFromBundle(sourceBundle))
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
func manifestFileResults(files []bundle.ManifestFile) []manifestFileResult {
|
||||
results := make([]manifestFileResult, 0, len(files))
|
||||
for _, file := range files {
|
||||
results = append(results, manifestFileResult{
|
||||
Path: file.Path,
|
||||
SHA256: file.SHA256,
|
||||
Size: file.Size,
|
||||
})
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
func formatManifestCreated(created time.Time) string {
|
||||
return created.Format(time.RFC3339)
|
||||
}
|
||||
Reference in New Issue
Block a user