/ internal / tools / axserver / Sources / Types.swift
Types.swift
  1  import Foundation
  2  
  3  struct Request: Decodable {
  4      let id: Int64
  5      let method: String
  6      let params: Params?
  7  }
  8  
  9  struct Params: Decodable {
 10      let pid: Int?
 11      let maxDepth: Int?
 12      let semanticBudget: Int?
 13      let filter: String?
 14      let path: String?
 15      let expectedRole: String?
 16      let value: String?
 17      let appName: String?
 18      let query: String?
 19      let role: String?
 20      let identifier: String?
 21      let type: String?
 22      let x: Double?
 23      let y: Double?
 24      let button: String?
 25      let clicks: Int?
 26      let key: String?
 27      let modifiers: [String]?
 28      let dx: Int?
 29      let dy: Int?
 30      let windowTitle: String?
 31      let verify: Bool?
 32      let condition: String?
 33      let timeout: Double?
 34      let interval: Double?
 35      let roles: [String]?
 36      let maxLabels: Int?
 37  
 38      enum CodingKeys: String, CodingKey {
 39          case pid, filter, path, value, query, role, identifier, type
 40          case x, y, button, clicks, key, modifiers, dx, dy
 41          case condition, timeout, interval, verify, roles
 42          case maxDepth = "max_depth"
 43          case semanticBudget = "semantic_budget"
 44          case expectedRole = "expected_role"
 45          case appName = "app_name"
 46          case windowTitle = "window_title"
 47          case maxLabels = "max_labels"
 48      }
 49  }
 50  
 51  struct Response: Encodable {
 52      let id: Int64
 53      var result: AnyCodable?
 54      var error: ErrorInfo?
 55  }
 56  
 57  struct ErrorInfo: Encodable {
 58      let code: Int
 59      let message: String
 60  }
 61  
 62  struct Element: Encodable {
 63      let ref: String
 64      let role: String
 65      var subrole: String?
 66      var title: String?
 67      var desc: String?
 68      var value: String?
 69      var enabled: Bool?
 70      var selected: Bool?
 71      var children: [Element]?
 72  }
 73  
 74  struct ReadTreeResult: Encodable {
 75      let app: String
 76      let pid: Int
 77      let window: String
 78      let elements: [Element]
 79      let refPaths: [String: RefEntry]
 80  
 81      enum CodingKeys: String, CodingKey {
 82          case app, pid, window, elements
 83          case refPaths = "ref_paths"
 84      }
 85  }
 86  
 87  struct RefEntry: Encodable {
 88      let path: String
 89      let role: String
 90  }
 91  
 92  struct AnnotationEntry: Encodable {
 93      let label: Int
 94      let ref: String
 95      let role: String
 96      var title: String?
 97      let x: Double
 98      let y: Double
 99      let width: Double
100      let height: Double
101  }
102  
103  struct AnnotateResult: Encodable {
104      let app: String
105      let pid: Int
106      let window: String
107      let annotations: [AnnotationEntry]
108      let refPaths: [String: RefEntry]
109  
110      enum CodingKeys: String, CodingKey {
111          case app, pid, window, annotations
112          case refPaths = "ref_paths"
113      }
114  }
115  
116  struct FindResult: Encodable {
117      let path: String
118      let role: String
119      let title: String
120      var desc: String?
121      var value: String?
122  }
123  
124  struct AppContext: Encodable {
125      let app: String
126      let window: String
127      var url: String?
128      var focusedElement: String?
129  
130      enum CodingKeys: String, CodingKey {
131          case app, window, url
132          case focusedElement = "focused_element"
133      }
134  }
135  
136  struct ActionResult: Encodable {
137      let result: String
138      var role: String?
139      var context: AppContext?
140  }
141  
142  /// Type-erased Encodable wrapper for JSON responses.
143  struct AnyCodable: Encodable {
144      private let _encode: (Encoder) throws -> Void
145  
146      init<T: Encodable>(_ value: T) {
147          _encode = { encoder in
148              try value.encode(to: encoder)
149          }
150      }
151  
152      func encode(to encoder: Encoder) throws {
153          try _encode(encoder)
154      }
155  }