Files
Pulse/Sources/PulseUI/Features/Console/List/ConsoleListOptions.swift

115 lines
3.0 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// The MIT License (MIT)
//
// Copyright (c) 20202023 Alexander Grebenyuk (github.com/kean).
import Foundation
import Pulse
struct ConsoleListOptions {
var messageSortBy: MessageSortBy = .dateCreated
var taskSortBy: TaskSortBy = .dateCreated
#if os(macOS)
var order: Ordering = .ascending
#else
var order: Ordering = .descending
#endif
var messageGroupBy: MessageGroupBy = .noGrouping
var taskGroupBy: TaskGroupBy = .noGrouping
enum Ordering: String, CaseIterable {
case descending = "Descending"
case ascending = "Ascending"
}
enum MessageSortBy: String, CaseIterable {
case dateCreated = "Date"
case level = "Level"
var key: String {
switch self {
case .dateCreated: return "createdAt"
case .level: return "level"
}
}
}
enum TaskSortBy: String, CaseIterable {
case dateCreated = "Date"
case duration = "Duration"
case requestSize = "Request Size"
case responseSize = "Response Size"
var key: String {
switch self {
case .dateCreated: return "createdAt"
case .duration: return "duration"
case .requestSize: return "requestBodySize"
case .responseSize: return "responseBodySize"
}
}
}
enum MessageGroupBy: String, CaseIterable, ConsoleListGroupBy {
case noGrouping = "No Grouping"
case label = "Label"
case level = "Level"
case file = "File"
case session = "Session"
var key: String? {
switch self {
case .noGrouping: return nil
case .label: return "label"
case .level: return "level"
case .file: return "file"
case .session: return "session"
}
}
var isAscending: Bool {
switch self {
case .noGrouping, .label, .file: return true
case .level, .session: return false
}
}
}
enum TaskGroupBy: ConsoleListGroupBy {
case noGrouping
case url
case host
case method
case taskType
case statusCode
case errorCode
case requestState
case responseContentType
case session
var key: String? {
switch self {
case .noGrouping: return nil
case .url: return "url"
case .host: return "host"
case .method: return "httpMethod"
case .taskType: return "taskType"
case .statusCode: return "statusCode"
case .errorCode: return "errorCode"
case .requestState: return "requestState"
case .responseContentType: return "responseContentType"
case .session: return "session"
}
}
var isAscending: Bool {
self != .errorCode && self != .session
}
}
}
protocol ConsoleListGroupBy {
var key: String? { get }
var isAscending: Bool { get }
}