diff --git a/Sources/SWBProtocol/BuildOperationMessages.swift b/Sources/SWBProtocol/BuildOperationMessages.swift index c4a52f3b..9f964ebd 100644 --- a/Sources/SWBProtocol/BuildOperationMessages.swift +++ b/Sources/SWBProtocol/BuildOperationMessages.swift @@ -558,6 +558,10 @@ public struct BuildOperationMetrics: Equatable, Codable, Sendable { /// The key is the first component of task rule info, a.k.a. the rule info type public let taskCounters: [String: [TaskCounter: Int]] + public var isEmpty: Bool { + counters.isEmpty && taskCounters.isEmpty + } + public init(counters: [Counter : Int], taskCounters: [String: [TaskCounter: Int]]) { self.counters = counters self.taskCounters = taskCounters diff --git a/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleBuildCommandProtocol.swift b/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleBuildCommandProtocol.swift index 05492729..c1ca969a 100644 --- a/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleBuildCommandProtocol.swift +++ b/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleBuildCommandProtocol.swift @@ -14,7 +14,6 @@ public import Foundation public import SWBProjectModel -public import SWBProtocol import SWBUtil @@ -169,10 +168,10 @@ public enum SwiftBuildMessage { } public struct BuildOperationMetrics { - let counters: [SWBProtocol.BuildOperationMetrics.Counter: Int] + public let counters: [String: Int] /// The key is the first component of task rule info, a.k.a. the rule info type - let taskCounters: [String: [SWBProtocol.BuildOperationMetrics.TaskCounter: Int]] + public let taskCounters: [String: [String: Int]] } public struct BuildCompletedInfo { diff --git a/Sources/SwiftBuild/SWBuildMessage+Protocol.swift b/Sources/SwiftBuild/SWBuildMessage+Protocol.swift index 162e7c26..7cdd1049 100644 --- a/Sources/SwiftBuild/SWBuildMessage+Protocol.swift +++ b/Sources/SwiftBuild/SWBuildMessage+Protocol.swift @@ -47,8 +47,11 @@ extension SwiftBuildMessage { init(_ message: BuildOperationEnded) { let metrics: BuildOperationMetrics? - if let messageMetrics = message.metrics, !messageMetrics.counters.isEmpty { - metrics = .init(counters: messageMetrics.counters, taskCounters: messageMetrics.taskCounters) + if let messageMetrics = message.metrics, !messageMetrics.isEmpty { + metrics = .init( + counters: Dictionary(uniqueKeysWithValues: messageMetrics.counters.map { ($0.key.rawValue, $0.value) }), + taskCounters: messageMetrics.taskCounters.mapValues { Dictionary(uniqueKeysWithValues: $0.map { ($0.key.rawValue, $0.value) }) } + ) } else { metrics = nil }