58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
// SPDX-FileCopyrightText: 2026 Kaede Akino
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
import AgentKit
|
|
import Foundation
|
|
|
|
/// Form defaults are materialized only by local saves, never by loading a record.
|
|
public nonisolated enum SavedName {
|
|
public static func resolve(_ name: String, default defaultName: String) -> String {
|
|
name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? defaultName : name
|
|
}
|
|
}
|
|
|
|
nonisolated extension Host {
|
|
public var defaultName: String { host.trimmingCharacters(in: .whitespacesAndNewlines) }
|
|
}
|
|
|
|
nonisolated extension Identity {
|
|
public var defaultName: String { Self.defaultName(username: username) }
|
|
|
|
public static func defaultName(username: String) -> String {
|
|
username.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
}
|
|
}
|
|
|
|
nonisolated extension SSHKeyRef {
|
|
public var defaultName: String { Self.defaultName(algorithm: algorithm, storage: storage) }
|
|
|
|
public static func defaultName(algorithm: SSHKeyAlgorithm, storage: KeyStorage) -> String {
|
|
storage == .secureEnclave ? "Secure Enclave" : algorithm.typeName
|
|
}
|
|
}
|
|
|
|
nonisolated extension PortForwardingRule {
|
|
public func defaultName(hostName: String) -> String {
|
|
guard !hostName.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return "" }
|
|
return "\(hostName) (\(kind.sshArgument))"
|
|
}
|
|
}
|
|
|
|
nonisolated extension PortForwardingRule.Kind {
|
|
public var sshArgument: String {
|
|
switch self {
|
|
case .local: "-L"
|
|
case .remote: "-R"
|
|
case .dynamic: "-D"
|
|
}
|
|
}
|
|
}
|
|
|
|
nonisolated extension AIModel {
|
|
public var savingName: AIModel {
|
|
var value = self
|
|
value.displayName = SavedName.resolve(displayName, default: id)
|
|
return value
|
|
}
|
|
}
|