Files
DevPack/pkg/manifest/manifest.go
2026-03-03 18:20:18 +08:00

76 lines
2.0 KiB
Go

package manifest
import (
"encoding/json"
"fmt"
"time"
)
// Manifest Pack 清单
type Manifest struct {
// 元信息
Version string `json:"version"` // DevPack 版本
FormatVer string `json:"format_ver"` // Pack 格式版本
PackID string `json:"pack_id"` // 唯一 ID (UUID)
Name string `json:"name"` // Pack 名称
Desc string `json:"description"`
Author string `json:"author"`
CreatedAt time.Time `json:"created_at"`
Tags []string `json:"tags,omitempty"`
// 源环境信息
Source SourceInfo `json:"source"`
// 采集器数据索引
Collectors []CollectorEntry `json:"collectors"`
// 加密信息
Encryption *EncryptionInfo `json:"encryption,omitempty"`
// 校验和
Checksum string `json:"checksum"`
}
// SourceInfo 源环境信息
type SourceInfo struct {
Hostname string `json:"hostname"`
OS string `json:"os"`
OSVersion string `json:"os_version"`
Arch string `json:"arch"`
Username string `json:"username"`
DevPackVersion string `json:"devpack_version"`
}
// CollectorEntry 采集器条目
type CollectorEntry struct {
Name string `json:"name"`
Category string `json:"category"`
Display string `json:"display_name"`
ItemCount int `json:"item_count"`
DataPath string `json:"data_path"`
DataSize int64 `json:"data_size"`
Checksum string `json:"checksum"`
}
// EncryptionInfo 加密信息
type EncryptionInfo struct {
Algorithm string `json:"algorithm"`
KDF string `json:"kdf"`
KDFParams map[string]int `json:"kdf_params"`
EncryptedCollectors []string `json:"encrypted_collectors"`
}
// ToJSON 序列化为 JSON
func (m *Manifest) ToJSON() ([]byte, error) {
return json.MarshalIndent(m, "", " ")
}
// FromJSON 从 JSON 反序列化
func FromJSON(data []byte) (*Manifest, error) {
var m Manifest
if err := json.Unmarshal(data, &m); err != nil {
return nil, fmt.Errorf("parse manifest: %w", err)
}
return &m, nil
}