aerospace fork
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117import Common
struct Gaps: ConvenienceMutable, Equatable, Sendable { var inner: Inner var outer: Outer
static let zero = Gaps(inner: .zero, outer: .zero)
struct Inner: ConvenienceMutable, Equatable, Sendable { var vertical: DynamicConfigValue<Int> var horizontal: DynamicConfigValue<Int>
static let zero = Inner(vertical: 0, horizontal: 0)
init(vertical: Int, horizontal: Int) { self.vertical = .constant(vertical) self.horizontal = .constant(horizontal) }
init(vertical: DynamicConfigValue<Int>, horizontal: DynamicConfigValue<Int>) { self.vertical = vertical self.horizontal = horizontal } }
struct Outer: ConvenienceMutable, Equatable, Sendable { var left: DynamicConfigValue<Int> var bottom: DynamicConfigValue<Int> var top: DynamicConfigValue<Int> var right: DynamicConfigValue<Int>
static let zero = Outer(left: 0, bottom: 0, top: 0, right: 0)
init(left: Int, bottom: Int, top: Int, right: Int) { self.left = .constant(left) self.bottom = .constant(bottom) self.top = .constant(top) self.right = .constant(right) }
init(left: DynamicConfigValue<Int>, bottom: DynamicConfigValue<Int>, top: DynamicConfigValue<Int>, right: DynamicConfigValue<Int>) { self.left = left self.bottom = bottom self.top = top self.right = right } }}
struct ResolvedGaps { let inner: Inner let outer: Outer
struct Inner { let vertical: Int let horizontal: Int
func get(_ orientation: Orientation) -> Int { orientation == .h ? horizontal : vertical } }
struct Outer { let left: Int let bottom: Int let top: Int let right: Int }
@MainActor init(gaps: Gaps, monitor: any MonitorInfo) { inner = .init( vertical: gaps.inner.vertical.getValue(for: monitor), horizontal: gaps.inner.horizontal.getValue(for: monitor), )
outer = .init( left: gaps.outer.left.getValue(for: monitor), bottom: gaps.outer.bottom.getValue(for: monitor), top: gaps.outer.top.getValue(for: monitor), right: gaps.outer.right.getValue(for: monitor), ) }}
private let gapsParser: [String: any ParserProtocol<Gaps>] = [ "inner": Parser(\.inner, parseInner), "outer": Parser(\.outer, parseOuter),]
private let innerParser: [String: any ParserProtocol<Gaps.Inner>] = [ "vertical": Parser(\.vertical, parseIntDynamicValue), "horizontal": Parser(\.horizontal, parseIntDynamicValue),]
private let outerParser: [String: any ParserProtocol<Gaps.Outer>] = [ "left": Parser(\.left, parseIntDynamicValue), "bottom": Parser(\.bottom, parseIntDynamicValue), "top": Parser(\.top, parseIntDynamicValue), "right": Parser(\.right, parseIntDynamicValue),]
private func parseIntDynamicValue(_ raw: OrderedJson, _ backtrace: ConfigBacktrace, _ c: inout ConfigParserContext) -> DynamicConfigValue<Int> { parseDynamicValue(raw, ofType: Int.self, 0, backtrace, &c)}
func parseGaps(_ raw: OrderedJson, _ backtrace: ConfigBacktrace, _ c: inout ConfigParserContext) -> Gaps { parseTable(raw, .zero, gapsParser, backtrace, &c)}
func parseInner(_ raw: OrderedJson, _ backtrace: ConfigBacktrace, _ c: inout ConfigParserContext) -> Gaps.Inner { parseTable(raw, Gaps.Inner.zero, innerParser, backtrace, &c)}
func parseOuter(_ raw: OrderedJson, _ backtrace: ConfigBacktrace, _ c: inout ConfigParserContext) -> Gaps.Outer { parseTable(raw, Gaps.Outer.zero, outerParser, backtrace, &c)}