mirror of
https://github.com/cirruslabs/tart.git
synced 2026-10-07 23:00:57 +02:00
* Suspend/resume support
* Use RuntimeError.SuspendFailed for consistency's sake
* Add a comment about "Running" field deprecation
* Use compute credits
* Use Mac-specific input devices and remove --no-{audio,entropy}
* Suspend the VM when closing window and running with --suspendable
* Snapshotting Improvements (#539)
* Don't use static field for arguments
It throws a runtime error
* Fixed suspendability
* Lazy generation of new MAC addresses
To support cloning on suspended VMs
* Refactored
* formatted
* Configurable signal for window closing
* reformatted
* Don't generate MAC only for suspended VMs
* Removed misleading comment
* Reverted
* Lock while a suspendable VM is starting
* Lock on TART_HOME
---------
Co-authored-by: Fedor Korotkov <fedor.korotkov@gmail.com>
48 lines
1.4 KiB
Swift
48 lines
1.4 KiB
Swift
import ArgumentParser
|
|
import Foundation
|
|
import TextTable
|
|
|
|
enum Format: String, ExpressibleByArgument, CaseIterable {
|
|
case text, json
|
|
|
|
private(set) static var allValueStrings: [String] = Format.allCases.map { "\($0)"}
|
|
|
|
func renderSingle<T>(_ data: T) -> String where T: Encodable {
|
|
switch self {
|
|
case .text:
|
|
return renderList([data])
|
|
case .json:
|
|
let encoder = JSONEncoder()
|
|
encoder.outputFormatting = .prettyPrinted
|
|
return try! encoder.encode(data).asText()
|
|
}
|
|
}
|
|
|
|
func renderList<T>(_ data: Array<T>) -> String where T: Encodable {
|
|
switch self {
|
|
case .text:
|
|
if (data.count == 0) {
|
|
return ""
|
|
}
|
|
let table = TextTable<T> { (item: T) in
|
|
let mirroredObject = Mirror(reflecting: item)
|
|
return mirroredObject.children.enumerated()
|
|
.filter {(_, element) in
|
|
// Deprecate the "Running" field: only make it available
|
|
// from JSON for backwards-compatibility
|
|
element.label! != "Running"
|
|
}
|
|
.map { (_, element) in
|
|
let fieldName = element.label!
|
|
return Column(title: fieldName, value: element.value)
|
|
}
|
|
}
|
|
return table.string(for: data, style: Style.plain)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
case .json:
|
|
let encoder = JSONEncoder()
|
|
encoder.outputFormatting = .prettyPrinted
|
|
return try! encoder.encode(data).asText()
|
|
}
|
|
}
|
|
}
|