package common import ( "context" ) // TargetInfo 包装HostInfo,提供更丰富的功能 type TargetInfo struct { *HostInfo // 嵌入HostInfo,保持向后兼容 context context.Context metadata map[string]interface{} } // NewTargetInfo 创建新的目标信息 func NewTargetInfo(hostInfo HostInfo) *TargetInfo { return &TargetInfo{ HostInfo: &hostInfo, context: context.Background(), metadata: make(map[string]interface{}), } } // NewTargetInfoFromPtr 从HostInfo指针创建目标信息 func NewTargetInfoFromPtr(hostInfo *HostInfo) *TargetInfo { return &TargetInfo{ HostInfo: hostInfo, context: context.Background(), metadata: make(map[string]interface{}), } } // WithContext 设置上下文 func (t *TargetInfo) WithContext(ctx context.Context) *TargetInfo { t.context = ctx return t } // GetContext 获取上下文 func (t *TargetInfo) GetContext() context.Context { if t.context == nil { t.context = context.Background() } return t.context } // SetMetadata 设置元数据 func (t *TargetInfo) SetMetadata(key string, value interface{}) *TargetInfo { if t.metadata == nil { t.metadata = make(map[string]interface{}) } t.metadata[key] = value return t } // GetMetadata 获取元数据 func (t *TargetInfo) GetMetadata(key string) (interface{}, bool) { if t.metadata == nil { return nil, false } value, exists := t.metadata[key] return value, exists } // GetAllMetadata 获取所有元数据 func (t *TargetInfo) GetAllMetadata() map[string]interface{} { if t.metadata == nil { return make(map[string]interface{}) } // 返回副本,防止外部修改 result := make(map[string]interface{}) for k, v := range t.metadata { result[k] = v } return result } // Clone 克隆目标信息 func (t *TargetInfo) Clone() *TargetInfo { clonedHost := CloneHostInfo(t.HostInfo) cloned := &TargetInfo{ HostInfo: &clonedHost, context: t.context, metadata: make(map[string]interface{}), } // 复制元数据 for k, v := range t.metadata { cloned.metadata[k] = v } return cloned } // GetHostInfo 获取原始HostInfo(向后兼容) func (t *TargetInfo) GetHostInfo() HostInfo { return *t.HostInfo } // Validate 验证目标信息 func (t *TargetInfo) Validate() error { return ValidateHostInfo(t.HostInfo) } // String 返回字符串表示 func (t *TargetInfo) String() string { return HostInfoString(t.HostInfo) } // IsValid 检查目标是否有效 func (t *TargetInfo) IsValid() bool { return t.Validate() == nil } // HasMetadata 检查是否有指定的元数据 func (t *TargetInfo) HasMetadata(key string) bool { _, exists := t.GetMetadata(key) return exists }